MySQL innodb 配置詳解
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來禁止這個限制