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