天天看點

MySQL 性能監控4大名額——第二部分

MySQL 性能監控4大名額——第二部分
MySQL 性能監控4大名額——第二部分

檢查并設定連接配接限制

監控用戶端連接配接情況相當重要,因為一旦可用連接配接耗盡,新的用戶端連接配接就會遭到拒絕。mysql 預設的連接配接數限制為 151,可通過下面的查詢加以驗證:

“正常情況下,linux 或 solaris 應該能夠支援500到1000個同時連接配接。如果可用的 ram 較大,且每個連接配接的工作量較低或目标響應時間較為寬松,則最多可處理10000個連接配接。而 windows 能處理的連接配接數一般不超過2048個,這是由于該平台上使用的 posix 相容層。”

連接配接數限制可以在系統運作時進行調整:

監控連接配接使用率

如果伺服器真的達到 <code>max_connections</code> 限制,它就會開始拒絕新的連接配接。在這種情況下,<code>connection_errors_max_connections</code> 名額就會開始增加,同時,追蹤所有失敗連接配接嘗試的 <code>aborted_connects</code> 名額也會開始增加。

mysql 提供了許多有關連接配接錯誤的名額,幫助你調查連接配接問題。<code>connection_errors_internal</code> 是個很值得關注的名額,因為該名額隻會在錯誤源自伺服器本身時增加。内部錯誤可能反映了記憶體不足狀況,或者伺服器無法開啟新的線程。

應該設定告警的名額

<code>threads_connected</code>:當所有可用連接配接都被占用時,如果一個用戶端試圖連接配接至 mysql,後者會傳回 “too many connections(連接配接數過多)”錯誤,同時将 <code>connection_errors_max_connections</code> 的值增加。為了防止出現此類情況,你應該監控可用連接配接的數量,并確定其值保持在 <code>max_connections</code> 限制以内。

<code>aborted_connects</code>:如果該計數器在不斷增長,意味着使用者嘗試連接配接到資料庫的努力全都失敗了。此時,應該借助 <code>connection_errors_max_connections</code> 與 <code>connection_errors_internal</code> 之類細粒度高的名額調查該問題的根源。

MySQL 性能監控4大名額——第二部分
MySQL 性能監控4大名額——第二部分

mysql 預設的存儲引擎 innodb 使用了一片稱為緩沖池的記憶體區域,用于緩存資料表與索引的資料。緩沖池名額屬于資源名額,而非工作名額,前者更多地用于調查(而非檢測)性能問題。如果資料庫性能開始下滑,而磁盤 i/o 在不斷攀升,擴大緩沖池往往能帶來性能回升。

檢查緩沖池的大小

緩沖池大小調整操作是分塊進行的,緩沖池的大小必須為塊的大小乘以執行個體的數目再乘以某個倍數。

如果 <code>innodb_buffer_pool_chunk_size</code> 查詢沒有傳回結果,則表示在你使用的 mysql 版本中此參數無法更改,其值為 128 mib。

在伺服器啟動時,你可以這樣設定緩沖池的大小以及執行個體的數量:

關鍵的 innodb 緩沖池名額

mysql 提供了許多關于緩沖池及其使用率的名額。其中一些有用的名額能夠追蹤緩沖池的總大小,緩沖池的使用量,以及其處理讀取操作的效率。

名額 <code>innodb_buffer_pool_read_requests</code> 及 <code>innodb_buffer_pool_reads</code> 對于了解緩沖池使用率都非常關鍵。<code>innodb_buffer_pool_read_requests</code> 追蹤合理讀取請求的數量,而 <code>innodb_buffer_pool_reads</code> 追蹤緩沖池無法滿足,因而隻能從磁盤讀取的請求數量。我們知道,從記憶體讀取的速度比從磁盤讀取通常要快好幾個數量級,是以,如果 <code>innodb_buffer_pool_reads</code> 的值開始增加,意味着資料庫性能大有問題。

緩沖池使用率是在考慮擴大緩沖池之前應該檢查的重要名額。使用率名額無法直接讀取,但是可以通過下面的方式簡單地計算得到:

如果你的資料庫從磁盤進行大量讀取,而緩沖池還有許多閑置空間,這可能是因為緩存最近才清理過,還處于熱身階段。如果你的緩沖池并未填滿,但能有效處理讀取請求,則說明你的資料工作集相當适應目前的記憶體配置。

将緩沖池名額轉化為位元組

大多數緩沖池名額都以記憶體頁面為機關進行記錄,但是這些名額也可以轉化為位元組,進而使其更容易與緩沖池的實際大小相關聯。例如,你可以使用追蹤緩沖池中記憶體頁面總數的伺服器狀态變量找出緩沖池的總大小(以位元組為機關):

innodb 頁面大小是可調整的,但是預設設定為 16 kib,或 16,384 位元組。你可以使用 show variables 查詢了解其目前值:

在本文中,我們介紹了許多你應該加以監控進而了解 mysql 活動與性能表現的重要名額。如果你正在躊躇 mysql 監控方案,抓取下面列出的名額能讓你真正了解資料庫的使用模式與可能的限制情況。這些名額也能幫助你發現,何時擴充伺服器記憶體或将資料庫移至更為強大的主機,進而保持良好的應用性能。

查詢吞吐量

查詢延遲與錯誤

用戶端連接配接與錯誤

緩沖池使用率