欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL優(yōu)化必須調(diào)整的10項(xiàng)配置

 更新時(shí)間:2014年02月28日 14:22:24   作者:  
這篇文章主要介紹了MySQL優(yōu)化必須調(diào)整的10項(xiàng)配置,使用這些方法可以讓你快速地獲得一個(gè)穩(wěn)健的MySQL配置,需要的朋友可以參考下

當(dāng)我們被人雇來監(jiān)測MySQL性能時(shí),人們希望我們能夠檢視一下MySQL配置然后給出一些提高建議。許多人在事后都非常驚訝,因?yàn)槲覀兘ㄗh他們僅僅改動(dòng)幾個(gè)設(shè)置,即使是這里有好幾百個(gè)配置項(xiàng)。這篇文章的目的在于給你一份非常重要的配置項(xiàng)清單。

我們曾在幾年前在博客里給出了這樣的建議,但是MySQL的世界變化實(shí)在太快了!
寫在開始前…
即使是經(jīng)驗(yàn)老道的人也會(huì)犯錯(cuò),會(huì)引起很多麻煩。所以在盲目的運(yùn)用這些推薦之前,請記住下面的內(nèi)容:

一次只改變一個(gè)設(shè)置!這是測試改變是否有益的唯一方法。

大多數(shù)配置能在運(yùn)行時(shí)使用SET GLOBAL改變。這是非常便捷的方法它能使你在出問題后快速撤銷變更。但是,要永久生效你需要在配置文件里做出改動(dòng)。

一個(gè)變更即使重啟了MySQL也沒起作用?請確定你使用了正確的配置文件。請確定你把配置放在了正確的區(qū)域內(nèi)(所有這篇文章提到的配置都屬于 [mysqld])

服務(wù)器在改動(dòng)一個(gè)配置后啟不來了:請確定你使用了正確的單位。例如,innodb_buffer_pool_size的單位是MB而max_connection是沒有單位的。

不要在一個(gè)配置文件里出現(xiàn)重復(fù)的配置項(xiàng)。如果你想追蹤改動(dòng),請使用版本控制。

不要用天真的計(jì)算方法,例如”現(xiàn)在我的服務(wù)器的內(nèi)存是之前的2倍,所以我得把所有數(shù)值都改成之前的2倍“。

基本配置
你需要經(jīng)常察看以下3個(gè)配置項(xiàng)。不然,可能很快就會(huì)出問題。

innodb_buffer_pool_size:這是你安裝完InnoDB后第一個(gè)應(yīng)該設(shè)置的選項(xiàng)。緩沖池是數(shù)據(jù)和索引緩存的地方:這個(gè)值越大越好,這能保證你在大多數(shù)的讀取操作時(shí)使用的是內(nèi)存而不是硬盤。典型的值是5-6GB(8GB內(nèi)存),20-25GB(32GB內(nèi)存),100-120GB(128GB內(nèi)存)。

innodb_log_file_size:這是redo日志的大小。redo日志被用于確保寫操作快速而可靠并且在崩潰時(shí)恢復(fù)。一直到MySQL 5.1,它都難于調(diào)整,因?yàn)橐环矫婺阆胱屗髞硖岣咝阅埽硪环矫婺阆胱屗硎沟帽罎⒑蟾旎謴?fù)。幸運(yùn)的是從MySQL 5.5之后,崩潰恢復(fù)的性能的到了很大提升,這樣你就可以同時(shí)擁有較高的寫入性能和崩潰恢復(fù)性能了。一直到MySQL 5.5,redo日志的總尺寸被限定在4GB(默認(rèn)可以有2個(gè)log文件)。這在MySQL 5.6里被提高。

一開始就把innodb_log_file_size設(shè)置成512M(這樣有1GB的redo日志)會(huì)使你有充裕的寫操作空間。如果你知道你的應(yīng)用程序需要頻繁的寫入數(shù)據(jù)并且你使用的時(shí)MySQL 5.6,你可以一開始就把它這是成4G。

max_connections:如果你經(jīng)??吹健甌oo many connections'錯(cuò)誤,是因?yàn)閙ax_connections的值太低了。這非常常見因?yàn)閼?yīng)用程序沒有正確的關(guān)閉數(shù)據(jù)庫連接,你需要比默認(rèn)的151連接數(shù)更大的值。max_connection值被設(shè)高了(例如1000或更高)之后一個(gè)主要缺陷是當(dāng)服務(wù)器運(yùn)行1000個(gè)或更高的活動(dòng)事務(wù)時(shí)會(huì)變的沒有響應(yīng)。在應(yīng)用程序里使用連接池或者在MySQL里使用進(jìn)程池有助于解決這一問題。
InnoDB配置
從MySQL 5.5版本開始,InnoDB就是默認(rèn)的存儲(chǔ)引擎并且它比任何其他存儲(chǔ)引擎的使用都要多得多。那也是為什么它需要小心配置的原因。

innodb_file_per_table:這項(xiàng)設(shè)置告知InnoDB是否需要將所有表的數(shù)據(jù)和索引存放在共享表空間里(innodb_file_per_table = OFF) 或者為每張表的數(shù)據(jù)單獨(dú)放在一個(gè).ibd文件(innodb_file_per_table = ON)。每張表一個(gè)文件允許你在drop、truncate或者rebuild表時(shí)回收磁盤空間。這對于一些高級特性也是有必要的,比如數(shù)據(jù)壓縮。但是它不會(huì)帶來任何性能收益。你不想讓每張表一個(gè)文件的主要場景是:有非常多的表(比如10k+)。

MySQL 5.6中,這個(gè)屬性默認(rèn)值是ON,因此大部分情況下你什么都不需要做。對于之前的版本你必需在加載數(shù)據(jù)之前將這個(gè)屬性設(shè)置為ON,因?yàn)樗粚π聞?chuàng)建的表有影響。

innodb_flush_log_at_trx_commit:默認(rèn)值為1,表示InnoDB完全支持ACID特性。當(dāng)你的主要關(guān)注點(diǎn)是數(shù)據(jù)安全的時(shí)候這個(gè)值是最合適的,比如在一個(gè)主節(jié)點(diǎn)上。但是對于磁盤(讀寫)速度較慢的系統(tǒng),它會(huì)帶來很巨大的開銷,因?yàn)槊看螌⒏淖僨lush到redo日志都需要額外的fsyncs。將它的值設(shè)置為2會(huì)導(dǎo)致不太可靠(reliable)因?yàn)樘峤坏氖聞?wù)僅僅每秒才flush一次到redo日志,但對于一些場景是可以接受的,比如對于主節(jié)點(diǎn)的備份節(jié)點(diǎn)這個(gè)值是可以接受的。如果值為0速度就更快了,但在系統(tǒng)崩潰時(shí)可能丟失一些數(shù)據(jù):只適用于備份節(jié)點(diǎn)。

innodb_flush_method: 這項(xiàng)配置決定了數(shù)據(jù)和日志寫入硬盤的方式。一般來說,如果你有硬件RAID控制器,并且其獨(dú)立緩存采用write-back機(jī)制,并有著電池?cái)嚯姳Wo(hù),那么應(yīng)該設(shè)置配置為O_DIRECT;否則,大多數(shù)情況下應(yīng)將其設(shè)為fdatasync(默認(rèn)值)。sysbench是一個(gè)可以幫助你決定這個(gè)選項(xiàng)的好工具。

innodb_log_buffer_size: 這項(xiàng)配置決定了為尚未執(zhí)行的事務(wù)分配的緩存。其默認(rèn)值(1MB)一般來說已經(jīng)夠用了,但是如果你的事務(wù)中包含有二進(jìn)制大對象或者大文本字段的話,這點(diǎn)緩存很快就會(huì)被填滿并觸發(fā)額外的I/O操作??纯碔nnodb_log_waits狀態(tài)變量,如果它不是0,增加innodb_log_buffer_size。
其他設(shè)置
query_cache_size: query cache(查詢緩存)是一個(gè)眾所周知的瓶頸,甚至在并發(fā)并不多的時(shí)候也是如此。 最佳選項(xiàng)是將其從一開始就停用,設(shè)置query_cache_size = 0(現(xiàn)在MySQL 5.6的默認(rèn)值)并利用其他方法加速查詢:優(yōu)化索引、增加拷貝分散負(fù)載或者啟用額外的緩存(比如memcache或redis)。如果你已經(jīng)為你的應(yīng)用啟用了query cache并且還沒有發(fā)現(xiàn)任何問題,query cache可能對你有用。這是如果你想停用它,那就得小心了。

log_bin:如果你想讓數(shù)據(jù)庫服務(wù)器充當(dāng)主節(jié)點(diǎn)的備份節(jié)點(diǎn),那么開啟二進(jìn)制日志是必須的。如果這么做了之后,還別忘了設(shè)置server_id為一個(gè)唯一的值。就算只有一個(gè)服務(wù)器,如果你想做基于時(shí)間點(diǎn)的數(shù)據(jù)恢復(fù),這(開啟二進(jìn)制日志)也是很有用的:從你最近的備份中恢復(fù)(全量備份),并應(yīng)用二進(jìn)制日志中的修改(增量備份)。二進(jìn)制日志一旦創(chuàng)建就將永久保存。所以如果你不想讓磁盤空間耗盡,你可以用 PURGE BINARY LOGS 來清除舊文件,或者設(shè)置 expire_logs_days 來指定過多少天日志將被自動(dòng)清除。

記錄二進(jìn)制日志不是沒有開銷的,所以如果你在一個(gè)非主節(jié)點(diǎn)的復(fù)制節(jié)點(diǎn)上不需要它的話,那么建議關(guān)閉這個(gè)選項(xiàng)。

skip_name_resolve:當(dāng)客戶端連接數(shù)據(jù)庫服務(wù)器時(shí),服務(wù)器會(huì)進(jìn)行主機(jī)名解析,并且當(dāng)DNS很慢時(shí),建立連接也會(huì)很慢。因此建議在啟動(dòng)服務(wù)器時(shí)關(guān)閉skip_name_resolve選項(xiàng)而不進(jìn)行DNS查找。唯一的局限是之后GRANT語句中只能使用IP地址了,因此在添加這項(xiàng)設(shè)置到一個(gè)已有系統(tǒng)中必須格外小心。

總結(jié)

當(dāng)然還有其他的設(shè)置可以起作用,取決于你的負(fù)載或硬件:在慢內(nèi)存和快磁盤、高并發(fā)和寫密集型負(fù)載情況下,你將需要特殊的調(diào)整。然而這里的目標(biāo)是使得你可以快速地獲得一個(gè)穩(wěn)健的MySQL配置,而不用花費(fèi)太多時(shí)間在調(diào)整一些無關(guān)緊要的MySQL設(shè)置或讀文檔找出哪些設(shè)置對你來說很重要上。

相關(guān)文章

  • MySQL數(shù)據(jù)庫表約束超詳細(xì)講解

    MySQL數(shù)據(jù)庫表約束超詳細(xì)講解

    這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫表約束的相關(guān)資料,MySQL?約束是用于保持?jǐn)?shù)據(jù)完整性和一致性的規(guī)則,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • MySQL連接時(shí)出現(xiàn)2003錯(cuò)誤的實(shí)現(xiàn)

    MySQL連接時(shí)出現(xiàn)2003錯(cuò)誤的實(shí)現(xiàn)

    本文主要介紹了MySQL連接時(shí)出現(xiàn)2003錯(cuò)誤的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • MySQL取出隨機(jī)數(shù)據(jù)

    MySQL取出隨機(jī)數(shù)據(jù)

    MySQL 如何從表中取出隨機(jī)數(shù)據(jù) 以前在群里討論過這個(gè)問題,比較的有意思.mysql的語法真好玩.
    2008-04-04
  • MYSQL增加索引語句小結(jié)

    MYSQL增加索引語句小結(jié)

    這篇文章主要給大家介紹了關(guān)于MYSQL增加索引的相關(guān)資料,索引是一種特殊的文件(InnoDB數(shù)據(jù)表上的索引是表空間的一個(gè)組成部分),它們包含著對數(shù)據(jù)表里所有記錄的引用指針,需要的朋友可以參考下
    2023-09-09
  • 深入理解MySQL的數(shù)據(jù)庫引擎的類型

    深入理解MySQL的數(shù)據(jù)庫引擎的類型

    本篇文章是對MySQL的數(shù)據(jù)庫引擎的類型進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 開啟MySQL的binlog日志的方法步驟

    開啟MySQL的binlog日志的方法步驟

    這篇文章主要介紹了開啟MySQL的binlog日志的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • mysql 轉(zhuǎn)換NULL數(shù)據(jù)方法(必看)

    mysql 轉(zhuǎn)換NULL數(shù)據(jù)方法(必看)

    下面小編就為大家?guī)硪黄猰ysql 轉(zhuǎn)換NULL數(shù)據(jù)方法(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • mysql截取json對象特定數(shù)據(jù)的場景示例詳解

    mysql截取json對象特定數(shù)據(jù)的場景示例詳解

    這篇文章主要為大家介紹了mysql中截取json對象特定數(shù)據(jù)的場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • CentOS 7下使用rpm包安裝mysql 5.7.18

    CentOS 7下使用rpm包安裝mysql 5.7.18

    這篇文章主要為大家詳細(xì)介紹了CentOS 7下使用rpm包安裝mysql 5.7.18的教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • MySQL分組查詢Group By實(shí)現(xiàn)原理詳解

    MySQL分組查詢Group By實(shí)現(xiàn)原理詳解

    在MySQL 中,GROUP BY 的實(shí)現(xiàn)同樣有多種(三種)方式,其中有兩種方式會(huì)利用現(xiàn)有的索引信息來完成 GROUP BY,另外一種為完全無法使用索引的場景下使用。下面我們分別針對這三種實(shí)現(xiàn)方式做一個(gè)分析
    2016-05-05

最新評論