本文主要給大家簡單講講優(yōu)化MySQL哪些地方需要注意,相關(guān)專業(yè)術(shù)語大家可以上網(wǎng)查查或者找一些相關(guān)書籍補(bǔ)充一下,這里就不涉獵了,我們就直奔主題吧,希望優(yōu)化MySQL哪些地方需要注意這篇文章可以給大家?guī)硪恍嶋H幫助。
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比路南網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式路南網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋路南地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。
1、控制適當(dāng)?shù)臄?shù)據(jù)文件大小:
數(shù)據(jù)量越大,數(shù)據(jù)文件的大小也會越大,索引文件也就越大,從而影響性能,會使性能急劇下降,所以,要限制數(shù)據(jù)庫單表的數(shù)據(jù)量和數(shù)據(jù)文件大??;
2、碎片空洞注意:
往往我們在刪除表數(shù)據(jù)的時候,明明已經(jīng)刪除可是在底層只是被標(biāo)記為刪除,實際上并沒有釋放空間,所以要定期查看表的碎片,
show table status ---發(fā)現(xiàn)表的碎片情況(查看實際數(shù)據(jù)data_length和空洞數(shù)據(jù)data_free的比例如果,data_free非常大,則說明該表需要優(yōu)化了)
優(yōu)化的方法是:optimize table 表名; 或者 alter table 表名 engine=innodb來重建表空間;
3、行存儲格式注意:
在MySQL5.7.9之后,innodb表的行格式由之前默認(rèn)的compact變成了dynamic,二者的區(qū)別可以查看官方文檔,但是,compact格式會節(jié)約20%的空間,同時在存儲UTF8或UTF8MB4數(shù)據(jù)的時候,compact格式在存儲時會盡量的節(jié)約空間,不對其中的空格進(jìn)行存儲;
4、正確使用索引:
索引雖然能提升查詢性能,但是會降低MySQL寫數(shù)據(jù)的速度,同時,也會增大數(shù)據(jù)文件的大小,加的索引越多,寫入數(shù)據(jù)越慢,數(shù)據(jù)文件也就越大。所以在設(shè)計索引的時候,會要求主鍵的字段類型一定要用數(shù)字類型,并且要盡可能的小,能用INT的,絕對不要用bigint。在設(shè)計二級索引的時候,只添加需要的索引,避免添加重復(fù)索引和冗余索引,針對長字符串字段,盡量添加前綴索引;
---如何正確使用索引:
①:MySQL在使用索引時,采用的是最左匹配原則,如果是多列索引:idx_a_b_c(a,b,c),則可以發(fā)揮索引功能組合有:a, (a,b) (a,b,c)
②:MySQL在計算列里無法使用索引
③:MySQL在否定條件中不能使用索引
④:MySQL在join中連接字段類型如果不一致,則不能使用索引
*********************************************************************************
在MySQL中一些比較常用的系統(tǒng)參數(shù):
1、general_log:
建議在數(shù)據(jù)庫正常服務(wù)時,將該參數(shù)關(guān)閉,因為他會記錄提交到MySQL的一切東西,即浪費磁盤又影響效率。同時它也是分析問題的利器,可以在數(shù)據(jù)庫有異常的時候,把它打開,然后截取一段時間的日志,以幫助定位問題;
2、query_cache_size:
是用來緩存sql語句文本和對應(yīng)查詢結(jié)果的緩存空間。如果表沒有變化,再次查詢會直接返回結(jié)果,這是很高效的;如果表變化非常頻繁,則要不斷更新cache中的內(nèi)容,并且這個時候所粒度非常大,反而會成為瓶頸。所以很多情況下會關(guān)閉這個選項,將參數(shù)設(shè)置0
3、tmp_table_size:
在group by 或 distinct 的時候,如果sql語句用不到索引,就會使用系統(tǒng)內(nèi)部臨時表記錄中間狀態(tài)。如果tmp_table_size不夠大,則MySQL會自動使用物理磁盤,這會對查詢性能造成很大影響,增加此參數(shù)可以降低這種情況發(fā)生的概率;(注意:這是占用物理內(nèi)存的,要考慮實際的內(nèi)存空閑情況)
4、innodb_buffer_pool_size:
innodb最只要的緩存,用來緩存innodb索引頁面,undo頁面及其他一些輔助數(shù)據(jù),建議配置物理內(nèi)存的50%--75%
5、innodb_buffer_pool_instances:
這個參數(shù),把原來一整塊buffer pool分割為多塊內(nèi)存空間,每個空間獨立管理自己的空閑鏈表、刷新鏈表、LRU及其他數(shù)據(jù)結(jié)構(gòu)。這大大增加了并發(fā)性,能更有效利用緩存;
6、innodb_log_file_size和innodb_log_files_in_group
這兩個參數(shù)結(jié)合,決定了redo空間的大小,redo空間越大,可以存儲的增量更新日志越大,有效降低buffer pool臟頁面被淘汰的速度,同時減少了checkpoint的次數(shù),降低磁盤IO置換率,從而提升數(shù)據(jù)庫的寫入效率。不過也有可能導(dǎo)致數(shù)據(jù)庫異常退出時,恢復(fù)時間被拉長;
7、innodb_old_blocks_pct和innodb_old_blocks_time
這兩個參數(shù)控制buffer pool中緩存數(shù)據(jù)的過期和移動行為,二者結(jié)合設(shè)置,可以優(yōu)化一些全表掃描帶來的大規(guī)模更新buffer等問題;
8、innodb_numa_interleave:
該參數(shù)避免出現(xiàn)內(nèi)存被交換到SWAP分區(qū),影響性能
9、innodb_autoinc_lock_mode:
在innodb有自增列的情況下,在插入數(shù)據(jù)的時候,會自動產(chǎn)生自增值,這個參數(shù)是控制自增值生成的方式。目前有3個選項:0 1 2 ;使用2即in特人leave的,這樣在insert數(shù)據(jù)的時候不會用到標(biāo)記的auto-inc鎖,避免了auto-inc的死鎖問題,在insert...select場景下會極大提升性能,在做普通insert的時候,也會提升并發(fā)執(zhí)行的效率;
---注意:這個時候產(chǎn)生的自增值不是連續(xù)的,同時binlog格式需要設(shè)置為ROW,才能保證數(shù)據(jù)的安全性和一致性;
10、innodb_flush_method
innodb刷新數(shù)據(jù)和日志到磁盤文件的方式,默認(rèn)為NULL,但其實如果是Unix系統(tǒng)上,默認(rèn)是fsync;在使用SSD或PCIE類型的存儲時,可以設(shè)置為O_DIRECT, 該參數(shù)會提升性能;
11、innodb_doublewrite
如果底層存儲時支持原子寫的,則可以關(guān)閉兩次寫,以提升效率;
12、innodb_io_capacity
如果使用SSD設(shè)備的時候,可以適當(dāng)提高這個參數(shù)值,以加速flush的頻率;
13、innodb_thread_concurrency
在并發(fā)量大的實列上,增加這個值,可以降低innodb在并發(fā)線程之間切換的花銷,以增加系統(tǒng)的并發(fā)吞吐量;
14、innodb_flush_log_at_trx_commit
該參數(shù)的值0 1 2;0性能最好,但不安全; 1 最安全,但性能最差,如果使用的磁盤足夠好,還是建議使用1 ,否則根據(jù)實際情況選擇性的設(shè)置2
15、sync_binlog
MySQL同步binlog到磁盤的方式, 1 最安全,但性能最差; 0性能最好,但最不安全。建議設(shè)置1
16、binlog_format
MySQL的日志格式,在MySQL5.7.7以后,官方就默認(rèn)為ROW了,這也是最建議的設(shè)置
17、binlog_order_commits
事務(wù)在提交的時候?qū)懭隻inlog的順序,這是雙刃劍,如果打開,可以保證事務(wù)都以相同的順序?qū)懭攵M(jìn)制文件,如果關(guān)閉則可以提升性能。根據(jù)實際情況決定吧
18、tx_isolation
設(shè)置MySQL的隔離級別,推薦設(shè)置read committed,這在保證性能的前提下,同時設(shè)置binlog_format=ROW,確保通過binlog同步數(shù)據(jù)主從庫的一致性,兼顧安全,滿足絕大多數(shù)業(yè)務(wù)的需求;
19、slave_parallel_workers
在進(jìn)行多線程復(fù)制的時候,如果設(shè)置此參數(shù)為非零值,則可以打開多線程并發(fā)執(zhí)行回放日志的操作,以提升slave的同步性能;
優(yōu)化MySQL哪些地方需要注意就先給大家講到這里,對于其它相關(guān)問題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會捕捉一些行業(yè)新聞及專業(yè)知識分享給大家的。