2012-10-09 68 views
1

我目前有2個網站託管在具有不同虛擬機的單個服務器上。每個網站都託管在自己的虛擬機上,配有IIS 7.5,PHP Fast CGI 5.3,它通過SQL Server Native Client 2012連接到MS SQL Server 2012 DBMS。SQL Server 2012駐留在單個專用虛擬機上,該虛擬機承載與網站,因爲一些數據正在網站之間共享。SQL Server Native Client 2012 + PHP + IIS - 大型查詢的性能問題

安裝程序基於Windows,因爲我們有幾個需要在虛擬機上運行的.NET服務,我們正在使用主要用於隔離和安全的網站分離虛擬機。

服務器具有Intel Xeon 2.4Ghz 6核心處理器X 2,具有32 GB RAM和10K RPM SAS作爲承載數據庫的主存儲器,虛擬機託管在另一個7.2K RPM SAS上。性能明智的網站是非常快的平均負載。

我們有一個後臺登錄我們的網站,我們經常執行大型查詢來檢查日誌和其他相關的網站及其操作。平均查詢需要大約一分鐘才能完成,因爲它是針對非常大的記錄集執行的。每當執行查詢時,該主機上的網站變得非常緩慢。

如果問題出在SQL Server或網絡服務器上,我們已經做了一些測試以縮小範圍。首先,我們直接在數據庫服務器上執行了很少的批量查詢,並且在檢查網站時,我們無法找到任何明顯表明SQL Server沒有瓶頸的性能問題。接下來,我們想看看這個問題是由Web服務器還是PHP還是SQL Server Native Client造成的。我們在服務器上託管了一個HTML測試文件,當我們執行批量查詢時,我們試圖訪問該文件,結果證明它一樣快。當從網站後端執行批量查詢時,使用小排序算法的普通php文件工作得很好。但是,當我們使用小型查詢實際測試數據庫連接時,查詢運行時需要花費時間加載。這清楚地表明PHP SQL Server驅動程序中存在瓶頸。

我知道PHP對MSSQL服務器並不是很好,但是由於開發的限制,我現在需要堅持使用MSSQL。我不知道當一個大的查詢正在進行時,什麼會減慢SQL Server Native Client的速度。我已經做了一些閱讀,並且我嘗試過玩ConnectionPooling以及MultipleActiveResultSets,但是在當前場景中沒有任何改進。該網站變得非常慢,連接到數據庫的每個頁面需要20秒,而沒有任何查詢在後端運行,它將在僅僅一兩秒鐘內加載。

這似乎僅限於特定的主機。當我在網站1上執行大量查詢時,網站1上的其他頁面非常緩慢,而網站2根本不顯示任何性能問題。嘗試檢查網絡主機和數據庫服務器上的CPU使用情況。他們只是5-10%多,我不認爲可能會對性能這樣的激烈問題負責。

我在想,也許可能有一個SQL Server Native Client 2012的錯誤是負責這個或有任何設置或案例,我錯過了?

預先感謝您。

回答

2

首先和最重要的是停止改變隨機設置(如啓用MARS),希望它改善。應用一種方法:測量,找出瓶頸,修復那些瓶頸。我建議您閱讀Waits and Queues論文,它一次又一次地證明了卓越的性能故障排除方法。按照Performance Troubleshooting Chart。然後,您將能夠正確識別根本原因(/咳嗽爭用)並適當地解決它。