MySQL資料庫引數

zping發表於2017-10-12

資料庫引數

MYSQL資料庫的引數配置一般在my.ini配置檔案中修改/新增(部分引數也可以用set global 引數名=值 做臨時調整,重啟後失效),配置完後需要重啟資料庫才生效。

引數1:innodb_buffer_pool_size = Gb/MB
說明:此引數類似於oracle的SGA配置,當主機做為mysql資料庫伺服器時,一般配置為整機記憶體的60%~80%。

引數2:innodb_buffer_pool_instances=N
說明:記憶體緩衝池例項數,將innodb_buffer_pool_size配置的記憶體分割成N份,此引數當配置記憶體大小於1G時才生效,當資料庫有多個會話進行資料庫操作時,用於並行在 多個記憶體塊中處理任務,一般配置值《=伺服器CPU的個數。

引數3:max_connections = 2000 說明:最大連線數,當資料庫面對高併發時,這個值需要調節為一個合理的值,才滿足業務的併發要求,避免資料庫拒絕連線。

引數4:max_user_connections=1000 說明:設定單個使用者的連線數。

引數5:innodb_log_buffer_size =32M
說明:日誌緩衝區大小,一般不用設定太大,能存下1秒鐘操作的資料日誌就行了,mysql預設1秒寫一輪詢寫一次日誌到磁碟。

引數6:innodb_flush_log_at_trx_commit
說明:(這個配置很關鍵)一般的實時業務交易配置為2,取值0,1,2

0:log buffer將每秒一次地寫入log file中,並且log file的flush(刷到磁碟)操作同時進行。該模式下在事務提交的時候,不會主動觸發寫入磁碟的操作。

1:每次事務提交時MySQL都會把log buffer的資料寫入log file,並且flush(刷到磁碟)中去,該模式為系統預設。

2:每次事務提交時MySQL都會把log buffer的資料寫入log file,但是flush(刷到磁碟)操作並不會同時進行。該模式下,MySQL會每秒執行一次 flush(刷到磁碟)操作。


0與2的區別:
0:當mysql掛了之後,可能會損失前一秒的事務資訊
2:當mysql掛了之後,如果系統檔案系統沒掛,不會有事務丟失。

引數7:innodb_read_io_threads = 16 說明:資料庫讀操作時的執行緒數,用於併發。

引數8:innodb_write_io_threads = 16 說明:資料庫寫操作時的執行緒數,用於併發。

引數9:innodb file per table= 1
說明:每一個表是否使用獨立的資料表空間,預設為OFF(使用共享表空間),一般建議配置為1,
InnoDB 預設會將所有的資料庫InnoDB引擎的表資料儲存在一個共享空間中:(ibdata1),這樣就感覺不爽,增刪資料庫的時候,ibdata1檔案不會自動收縮,
單個資料庫的備份也將成為問題。通常只能將資料使用mysqldump 匯出,然後再匯入解決這個問題。 共享表空間在Insert操作上少有優勢。
其它都沒獨立表空間表現好,如果資料庫基本上都插入操作則配置為0。

引數10:innodb_stats_on_metadata={ OFF|on}
說明:是否動態收集統計資訊,開啟時會影響資料庫的效能(一般關閉,找個時間手動重新整理,或定時重新整理)如果為關閉時,需要配置資料庫排程任務,定時重新整理資料庫的統計資訊。

引數11:innodb_spin_wait_delay=10 說明:控制CPU的輪詢時間間隔,預設是6,配置過低時,任務排程比較頻繁,會消耗CPU資源。

引數12:innodb_lock_wait_timeout=30 說明:控制鎖的超時時間,預設為50,這個值要注意,如果有特殊業務確實要耗時較長時,不能配置太短。

相關文章