mysql innodb 效能優化

2021-04-23 05:27:20 字數 1741 閱讀 1678

預設情況下,innodb的引數設定的非常小,在生產環境中遠遠不夠用

比如最重要的兩個引數

innodb_buffer_pool_size 預設是8m

innodb_flush_logs_at_trx_commit 預設設定的是1 也就是同步重新整理log(可以這麼理解)

innodb_buffer_pool_size:這是innodb最重要的設定,對innodb效能有決定性的影響。預設的設定只有8m,所以預設的資料庫設定下面innodb效能很差。在只有 innodb儲存引擎的資料庫伺服器上面,可以設定60-80%的記憶體。更精確一點,在記憶體容量允許的情況下面設定比innodb tablespaces大10%的記憶體大小。

innodb_data_file_path:指定表資料和索引儲存的空間,可以是乙個或者多個檔案。最後乙個資料檔案必須是自動擴充的,也只有最後乙個檔案允許自動擴充。這樣,當空間用完後,自動擴充資料檔案就會自動增長(以8mb為單位)以容納額外的資料。例如: innodb_data_file_path=/disk1 /ibdata1:900m;/disk2/ibdata2:50m:autoextend兩個資料檔案放在不同的磁碟上。資料首先放在ibdata1 中,當達到900m以後,資料就放在ibdata2中。一旦達到50mb,ibdata2將以8mb為單位自動增長。如果磁碟滿了,需要在另外的磁碟上面增加乙個資料檔案。

innodb_data_home_dir:放置表空間資料的目錄,預設在mysql的資料目錄,設定到和mysql安裝檔案不同的分割槽可以提高效能。

innodb_log_file_size:該引數決定了recovery speed。太大的話recovery就會比較慢,太小了影響查詢效能,一般取256m可以兼顧效能和recovery的速度

。innodb_log_buffer_size:磁碟速度是很慢的,直接將log寫道磁碟會影響innodb的效能,該引數設定了log buffer的大小,一般4m。如果有大的blob操作,可以適當增大。

innodb_flush_logs_at_trx_commit=2: 該引數設定了事務提交時記憶體中log資訊的處理。

1) =1時,在每個事務提交時,日誌緩衝被寫到日誌檔案,對日誌檔案做到磁碟操作的重新整理。truly acid。速度慢。

2) =2時,在每個事務提交時,日誌緩衝被寫到檔案,但不對日誌檔案做到磁碟操作的重新整理。只有作業系統崩潰或掉電才會刪除最後一秒的事務,不然不會丟失事務。

3) =0時, 日誌緩衝每秒一次地被寫到日誌檔案,並且對日誌檔案做到磁碟操作的重新整理。任何mysqld程序的崩潰會刪除崩潰前最後一秒的事務

innodb_file_per_table:可以儲存每個innodb表和它的索引在它自己的檔案中。

transaction-isolation=read-comitted: 如果應用程式可以執行在read-commited隔離級別,做此設定會有一定的效能提公升。

innodb_flush_method: 設定innodb同步io的方式:

1) default – 使用fsync()。

2) o_sync 以sync模式開啟檔案,通常比較慢。

3) o_direct,在linux上使用direct io。可以顯著提高速度,特別是在raid系統上。避免額外的資料複製和double buffering(mysql buffering 和os buffering)。

innodb_thread_concurrency: innodb kernel最大的執行緒數。

1) 最少設定為(num_disks+num_cpus)*2。

2) 可以通過設定成1000來禁止這個限制

MySQL innoDB效能優化

起因 有乙個innodb引擎的表table,在乙個大概3000次的foreach迴圈中執行 insert into table columna,columnb values valuea,valueb 結果居然超出了60s的php執行限制 當然這個限制可以在php.ini中修改 讓我很不解為何插入效...

mysql innodb 效能優化

預設情況下,innodb的引數設定的非常小,在生產環境中遠遠不夠用 比如最重要的兩個引數 innodb buffer pool size 預設是8m innodb flush logs at trx commit 預設設定的是1 也就是同步重新整理log 可以這麼理解 innodb buffer p...

MySQL innoDB資料插入效能優化

起因 有乙個innodb引擎的表table,在乙個大概3000次的foreach迴圈中執行 insert into table columna,columnb values valuea,valueb 結果居然超出了60s的php執行限制 當然這個限制可以在php.ini中修改 讓我很不解為何插入效...