InnoDB效能調節提示

2021-04-13 08:21:32 字數 2286 閱讀 1622

原帖:http://imysql.cn/node/116

週三, 2006/09/06 - 15:27 — yejr

· 如果unix的top工具或者windows任務管理器顯示,你的資料庫的工作負荷的cpu使用率小於70%,則你的工作負荷可能是磁碟繫結的,可能你正 生成太多的事務和提交,或者緩衝池太小。使得緩衝池更大一些會有幫助的,但不要設定緩衝池等於或超過物理記憶體的80%.

· 把數個修改放在乙個事務裡。如果事務對資料庫修改,innodb在該事務提交時必須重新整理日誌到磁碟。因為磁碟旋轉的速度至多167轉/秒,如果磁碟沒有騙作業系統的話,這就限制提交的數目為同樣的每秒167次。

· 如果你可以接受損失一些最近的已提交事務,你可以設定引數 innodb_flush_log_at_trx_commit 為 0。無論如何innodb試著每秒重新整理一次日誌,儘管重新整理不被許可。

· 使用大的日誌檔案,甚至讓它與緩衝池一樣大。當innodb寫滿日誌檔案時,它不得不在乙個檢查點把緩衝池已修改的內容寫進磁碟。小日誌檔案導致許多不必要的吸盤寫操作。大日誌檔案的缺點時恢復時間更長。

· 也讓日誌緩衝相當大(與8mb相似的數量)。

· 如果你儲存變長字串,或者列可能包含很多null值,則使用varchar列型別而不是char型別。乙個char(n)列總是佔據n個位元組來儲存,即使字串更短或字串的值是null。越小的表越好地適合緩衝池並且減少磁碟i/o。

當使用row_format=compact (mysql 5.1中預設的innodb記錄格式)和可變長度字符集,比如gb2312或sjis,char(n)將佔據可變數量的空間,至少為n 位元組。

· 在一些版本的gnu/linux和unix上,用unix的fsync()(innodb預設使用的)把檔案重新整理到磁碟,並且其他相似的方法是驚人的慢。 如果你不滿意資料庫的寫效能,你可以試著設定引數 innodb_flush_method 值為 o_dsync,雖然 o_dsync 在多數系統上看起來更慢。

· 當在solaris 10上,為x86_64架構(amd opteron)使用innodb儲存引擎,重要的是使用forcedirectio選項來安裝任何為儲存與innodb相關的檔案而使用的資料系統。 (預設在solaris 10/x86_64上不使用這個檔案系統安裝選項 )。使用forcedirectio 失敗會導致innodb在這個平台上的速度和效能嚴重下降。

· 當匯入資料到innodb中之時,請確信mysql沒有允許autocommit模式,因為允許autocommit模式會需要每次插入都要重新整理日誌到磁 盤。要在匯入操作規程中禁止autocommit模式,用set autocommit和commit語句來包住匯入語句:

set autocommit=0;

/* sql import statements ... */

commit;

· 如果你使用mysqldump 選項--opt,即使不用set autocommit和commit語句來包裹,你也使得快速的轉儲檔案被匯入到innodb表中。

· 小心大宗插入的大回滾:innodb在插入中使用插入緩衝來節約磁碟i/o, 但是在相應的回滾中沒有使用這樣的機制。乙個磁碟繫結的回滾可以用相應插入花費時間的30倍來執行。殺掉資料庫程序沒有是幫助的,因為回滾在伺服器啟動時 會再次啟動。除掉乙個失控的回滾的唯一方法是增大緩衝池使得回滾變成cpu繫結且跑得快,或者使用專用步驟,請參閱15.2.8.1節,「強制恢復」。

· 也要小心其它大的磁碟繫結操作。用 drop table 或 create table 來清空乙個表,而不是用 delete from tbl_name。

· 如果你需要插入許多行,則使用多行插入語法來減少客戶端和伺服器之間的通訊開支:

insert into yourtable values (1,2), (5,5), ...;

這個提示對到任何表型別的插入都是合法的,不僅僅是對innodb型別。

· 如果你在第二個鍵上有unique約束,你可以在匯入會話中暫時關閉唯一性檢查以加速表的匯入:

set unique_checks=0;

對於大表,這節約了大量磁碟i/o,因為innodb可以使用它的插入緩衝來在一批內寫第二個索引記錄。

· 如果你對你的表有foreign key約束,你可以在匯入會話過程中通過關閉外來鍵檢查來提速表的匯入:

set foreign_key_checks=0;

對於大表,這可以節約大量的磁碟i/o。

· 如果你經常有對不經常更新的表的重發查詢,請使用查詢快取:

[mysqld]

query_cache_type = on

query_cache_size = 10m

mysql 中文網,打造最好的

mysql 中文網!

SQL效能調節

一 sql的執行過程 1.建立游標 create a cursor 2.分析語句 parse the statement 3.描述查詢結果 4.定義查詢的輸出資料 5.繫結變數 6.並行執行語句 7.執行語句 8.取出查詢的行 9.關閉游標 二 cbo規則 cbo i 0 cpu network 三...

關於innodb插入效能

根據某的測試,innodb在以下條件下插入效能是穩定的 mysql innodb 在滿足以下條件下,千萬級別的表 插入速度 效能穩定。不需要經常修改表結構 not always alter table,alter column or alter index 沒有經常性的 bulk insert 需求...

mysql的效能配置 innodb

拜讀mysql高效能,總結 mysql使用innode作為儲存引擎的主要配置選項 innodb buffer pool size innodb log file size key buffer size max connections thread cache table cache open fi...