2012-01-06 49 views
22

我有一個用於統計的數據庫,有2000多個表,每個表有大約100百萬行。優化和檢查表mysql

我認爲每週幾次檢查表格以確保它們是健康的,如果沒有,請修復並優化它們。

60%的表格每天都在更新,其餘的都是檔案。

我的問題是關於check(repair)/optimize:檢查表健康狀況並每週優化幾次以確保系統運行順利嗎?

+0

被每天不斷更新的表的問題:他們的MyISAM或InnoDB的??? – RolandoMySQLDBA 2012-01-13 21:05:32

回答

24

一般需要優化表時,它的數據文件被太多的磁盤上(使用的工具割裂爲你的文件系統檢查的鏈接 - 鏈接腳本通過GiantRobot不計算碎片),當有很多行更新並更改它們的大小(這會創建行碎片),或者在刪除很多記錄後,如果不再快速添加它們,那麼可以使用GiantRobot。由於MySQL使用可用空間作爲新行,所以當刪除的和新的記錄具有相同的行大小時,不需要OPTIMIZE。

CHECK TABLE僅用於懷疑數據損壞(在正常運行期間不應發生)的情況。一些Linux發行版(例如Debian)具有啓動腳本,它們爲MySQL服務器啓動時的所有表運行CHECK TABLE。然後使用REPAIR TABLE來修復損壞的表格。

ANALYZE TABLE可用於更新索引基數,用於確定查詢執行計劃。通常只在特殊情況下才需要。

從您的問題中不清楚您的統計表如何使用......多少次寫入,刪除和讀取?我的統計表始終有寫入,每天一次讀取,數據合併並寫入其他表,然後刪除。在這種情況下,不需要運行OPTIMIZE,因爲數據不經常被讀取,並且自由空間被重新用於新數據。我正在使用分區的一天,所以而不是刪除記錄(這是非常緩慢的),我只是刪除分區(最多需要1秒)

0

2000張桌子和100百萬行每個看起來很大! 如果您嘗試在優化期間優化每個表幾次,優化期間, 表將被鎖定,因此您將無法寫入這些表直到完成工作 這裏是一個只檢查碎片表的腳本(%60你的桌子可能),並只優化分散的,讓我們知道它是否有效。

注:我無法測試腳本,因爲我使用Windows機器爲我當前的項目。 閱讀下面的腳本註釋和筆記我提供

Optimize only fragmented tables in MySQL

0

修復是非常緩慢的大表;你可能應該避免使用MyISAM的非常大的表,特別是大量的索引。寧願分割它們來減少修復時間。這可能需要對應用程序代碼進行重大更改。

您還可以看到維修here