[英]Increasing MySQL Performance - InnoDB
我正在使用Linux CentOS和MySQL ,直到現在,這是my.cnf的內容:
sql_mode="NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER"
max_connections = 750
max_connect_errors = 750
connect_timeout = 28800
max_allowed_packet = 500M
character_set_server = utf8
query_cache_size = 500M
我正在嘗試使用該參數來提高MySQL性能,因為我閱讀了其中一些已過時的參數,因此,我選擇InnoDB作為引擎並嘗試將其設置如下:
default_storage_engine = INNODB
innodb_buffer_pool_size=9G
innodb_buffer_pool_instances=64
因此,my.cnf的最終設置為:
sql_mode="NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER"
max_connections = 750
max_connect_errors = 750
connect_timeout = 28800
character_set_server = utf8
default_storage_engine = INNODB
innodb_buffer_pool_size=6G
innodb_buffer_pool_instances=64
但是最后,服務器過載了,沒有使用所有可用內存( 3GB / 8GB,而不是我使用innodb_buffer_pool_size所期望的6GB / 8GB ),並且我必須重新啟動MySQL服務才能恢復並規范服務狀態。
我如何才能真正提高MySQL性能? 或您能給我哪些建議?
預先,謝謝。
嘗試設置innodb_flush_log_at_trx_commit=2
其他信息可以在這里找到https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit
query_cache_size = 500M
性能。
對表的每次寫入都會清除該表的QC中的所有條目。 對於大型QC,它的執行速度很慢。
50M是該設置的實際最大值。
QC正在從InnoDB的buffer_pool中奪走內存,在那可能會更有用。
如果計算機上沒有其他應用程序,並且降低了QC,則8GB計算機上的buffer_pool的6G應該可以。 留意交換-這對於性能來說很糟糕。
另外,對於innodb_buffer_pool_instances
僅建議使用6 innodb_buffer_pool_instances
-建議每個實例1G。
connect_timeout
涉及放棄建立連接,而不是放棄連接可以停留多長時間。 60
以下是合理的。
但是...通常,不良的性能來自於不良的索引(尤其是在需要時缺少“復合”索引)以及將索引列隱藏在函數調用中(例如WHERE DATE(created_at) = '...'
)。
因此,讓我們看看哪些查詢很慢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.