1. 程式人生 > >資料庫伺服器的效能調優-續

資料庫伺服器的效能調優-續

    企業級資料庫伺服器可能擁有數千個併發訪問資料庫的使用者。某些使用者可能執行只需較少處理能力的簡單事務,而其他使用者則可能執行涉及更多系統資源的複雜事務。 資料庫效能常常基於諸如每小時的事務數或 X個併發連線下的最小響應時間等度量來討論。這些效能約束由企業施加,以便確保客戶的質量保證等級。由於對併發處理具有如此高的需求,企業級資料庫伺服器需要運行於大型 SMP伺服器上。早期的 Linux核心並不很適合充當需要高併發度的資料庫伺服器。這些核心並沒有隨著系統上的處理器數量的增加而提供良好的擴充套件性,因為早期核心的開發由單處理器機器所驅動。遷移至多處理器平臺時需要許多全域性核心鎖的支援,否則會導致序列化問題。 其中最大的鎖是用於保護單個未排序的執行佇列的自旋鎖
(spin lock)。 在單處理器環境中, 單個佇列足以排程所有可執行任務。然而, 在 SMP環境中, 單個執行佇列並不夠,這會成為一個瓶頸。隨著處理器數量的增多,在執行佇列上鎖競爭的可能性也增加。另
外,由於該佇列是未排序的,當鎖被持有時排程器需要檢查佇列中的所有任務以便確定每個任務的良好度
(每個任務被賦予一個良好度取值, 用於確定哪個任務將是被排程至處理器上執行的最佳候選)。 這增加了鎖持有時間, 從而增加了鎖競爭的可能性或加劇當前的競爭條件。在 Linux 2.5核心中, 這個唯一執行佇列被刪除並替換為基於 CPU的執行佇列。擁有多個執行佇列刪除了對單個全域性鎖的需求並改進了整體的可擴充套件性。另外,每個執行佇列都維護一個優先順序列表,有助於排程器選擇要執行的最佳任務。這種優先排序可以減少佇列上的鎖持有時間,並進一步減少了鎖競爭
 。