mysql服務效能最佳化—my.cnf配置說明詳解

來源:互聯網
上載者:User

標籤:存在   也會   並行   寫入   詳解   mmap   記憶體片段   ext   sql開發   

MYSQL伺服器my.cnf配置文檔詳解
硬體:記憶體16G

 

[client]
port = 3306
socket = /data/3306/mysql.sock

[mysql]
no-auto-rehash

[mysqld]
user = mysql
port = 3306
socket = /data/3306/mysql.sock
basedir = /usr/local/mysql
datadir = /data/3306/data
open_files_limit = 10240

back_log = 600    #在MYSQL暫時停止回應新請求之前,短時間內的多少個請求可以被存在堆棧中。如果系統在短時間內有很多串連,則需要增大該參數的值,該參數值指定到來的TCP/IP串連的監聽隊列的大小。預設值50。
max_connections = 3000   #MySQL允許最大的進程串連數,如果經常出現Too Many Connections的錯誤提示,則需要增大此值。
max_connect_errors = 6000   #設定每個主機的串連請求異常中斷的最大次數,當超過該次數,MYSQL伺服器將禁止host的串連請求,直到mysql伺服器重啟或通過flush hosts命令清空此host的相關資訊。
table_cache = 614   #指示表調整緩衝區大小。# table_cache 參數設定表快取的數目。每個串連進來,都會至少開啟一個表緩衝。#因此, table_cache 的大小應與 max_connections 的設定有關。例如,對於 200 個#並行啟動並執行串連,應該讓表的緩衝至少有 200 × N             #,這裡 N 是應用可以執行的查詢#的一個聯結中表的最大數量。此外,還需要為暫存資料表和檔案保留一些額外的檔案描述符。# 當 Mysql 訪問一個表時,如果該表在緩衝中已經被開啟,則可以直接存取緩衝;如果#還沒有被緩衝,但是在 Mysql 表緩衝區中還有             #空間,那麼這個表就被開啟並放入表緩#沖區;如果表緩衝滿了,則會按照一定的規則將當前未用的表釋放,或者臨時擴大表緩衝來存放,使用表緩衝的好處是可以更快速地訪問表中的內容。執行 flush tables 會#清空緩衝的內容。一般來說,可以通過查看數             #據庫運行峰值時間的狀態值 Open_tables #和 Opened_tables ,判斷是否需要增加 table_cache 的值(其中 open_tables 是當#前開啟的表的數量, Opened_tables 則是已經開啟的表的數量)。即如果open_tables接近table_cache的時候,並             #且Opened_tables這個值在逐步增加,那就要考慮增加這個#值的大小了。還有就是Table_locks_waited比較高的時候,也需要增加table_cache。
external-locking = FALSE   #使用–skip-external-locking MySQL選項以避免外部鎖定。該選項預設開啟
max_allowed_packet = 32M   #設定在網路傳輸中一次訊息傳輸量的最大值。系統預設值 為1MB,最大值是1GB,必須設定1024的倍數。
sort_buffer_size = 2M   # Sort_Buffer_Size 是一個connection級參數,在每個connection(session)第一次需要使用這個buffer的時候,一次性分配設定的記憶體。
               #Sort_Buffer_Size 並不是越大越好,由於是connection級的參數,過大的設定+高並發可能會耗盡系統記憶體資源。例如:500個串連將會消耗 500*sort_buffer_size(8M)=4G記憶體
               #Sort_Buffer_Size 超過2KB的時候,就會使用mmap() 而不是 malloc() 來進行記憶體配置,導致效率降低。
join_buffer_size = 2M   #用於表間關聯緩衝的大小,和sort_buffer_size一樣,該參數對應的分配記憶體也是每個串連獨享。
thread_cache_size = 300     # 伺服器線程緩衝這個值表示可以重新利用儲存在緩衝中線程的數量,當中斷連線時如果緩衝中還有空間,那麼用戶端的線程將被放到緩衝中,如果線程重新被請求,那麼請求將從緩衝中讀取,如果緩衝中是空的或者是新的請求,那麼這個線程將被重新建立                  #,如果有很多新的線程,增加這個值可以改善系統效能.通過比較 Connections 和 Threads_created 狀態的變數,可以看到這個變數的作用。設定規則如下:1GB 記憶體配置為8,2GB配置為16,3GB配置為32,4GB或更高記憶體,可配置更大。
thread_concurrency = 8   # 設定thread_concurrency的值的正確與否, 對mysql的效能影響很大, 在多個cpu(或多核)的情況下,錯誤設定了thread_concurrency的值, 會導致mysql不能充分利用多cpu(或多核), 出現同一時刻只能一個cpu(或核)在工作的情況。thread_co               #ncurrency應設為CPU核心數的2倍. 比如有一個雙核的CPU, 那麼thread_concurrency的應該為4; 2個雙核的cpu, thread_concurrency的值應為8
query_cache_size = 64M    # 對於使用MySQL的使用者,對於這個變數大家一定不會陌生。前幾年的MyISAM引擎最佳化中,這個參數也是一個重要的最佳化參數。但隨著發展,這個參數也爆露出來一些問題。機器的記憶體越來越大,人們也都習慣性的把以前有用的參數分配的值越來越大。這個                #參數加大後也引發了一系列問題。我們首先分析一下 query_cache_size的工作原理:一個SELECT查詢在DB中工作後,DB會把該語句緩衝下來,當同樣的一個SQL再次來到DB裡調用時,DB在該表沒發生變化的情況下把結果從緩衝中返回給Client。這                 #裡有一個關建點,就是DB在利用Query_cache工作時,要求該語句涉及的表在這段時間內沒有發生變更。那如果該表在發生變更時,Query_cache裡的資料又怎麼處理呢?首先要把Query_cache和該表相關的語句全部置為失效,然後在寫入更新。那麼                 #如果Query_cache非常大,該表的查詢結構又比較多,查詢語句失效也慢,一個更新或是Insert就會很慢,這樣看到的就是Update或是Insert怎麼這麼慢了。所以在資料庫寫入量或是更新量也比較大的系統,該參數不適合分配過大。而且在高並發,寫入                #量大的系統,建議把該功能禁掉。
query_cache_limit = 4M   #指定單個查詢能夠使用的緩衝區大小,預設為1M
query_cache_min_res_unit = 2k    #預設是4KB,設定值大對大資料查詢有好處,但如果你的查詢都是小資料查詢,就容易造成記憶體片段和浪費
                    #查詢快取片段率 = Qcache_free_blocks / Qcache_total_blocks * 100%
                    #如果查詢快取片段率超過20%,可以用FLUSH QUERY CACHE整理緩衝片段,或者試試減小query_cache_min_res_unit,如果你的查詢都是小資料量的話。
                    #查詢快取利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
                    #查詢快取利用率在25%以下的話說明query_cache_size設定的過大,可適當減小;查詢快取利用率在80%以上而且Qcache_lowmem_prunes > 50的話說明query_cache_size可能有點小,要不就是片段太多。
                    #查詢快取命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%
default-storage-engine = MyISAM #default_table_type = InnoDB
thread_stack = 192K   #設定MYSQL每個線程的堆棧大小,預設值足夠大,可滿足普通操作。可設定範圍為128K至4GB,預設為192KB
transaction_isolation = READ-COMMITTED   ## 設定預設的交易隔離等級.可用的層級如下:
                         # 1.READ UNCOMMITTED-讀未提交2.READ COMMITTE-讀已提交3.REPEATABLE READ -可重複讀4.SERIALIZABLE -串列
tmp_table_size = 256M     # tmp_table_size 的預設大小是 32M。如果一張暫存資料表超出該大小,MySQL產生一個 The table tbl_name is full 形式的錯誤,如果你做很多進階 GROUP BY 查詢,增加 tmp_table_size 值。如果超過該值,則會將暫存資料表寫入磁碟。
max_heap_table_size = 256M long_query_time = 2 log_long_format log-slow-queries=/data/3306/slow-log.log #log-bin = /data/3306/mysql-bin log-bin binlog_cache_size = 4M max_binlog_cache_size = 8M max_binlog_size = 512M expire_logs_days = 7  #binlog到期時間自動清理 
key_buffer_size = 2048M   #批定用於索引的緩衝區大小,增加它可以得到更好的索引處理效能,對於記憶體在4GB左右的伺服器來說,該參數可設定為256MB或384MB。
read_buffer_size = 1M   # MySql讀入緩衝區大小。對錶進行順序掃描的請求將分配一個讀入緩衝區,MySql會為它分配一段記憶體緩衝區。read_buffer_size變數控制這一緩衝區的大小。如果對錶的順序掃描請求非常頻繁,並且你認為頻繁掃描進行得太慢,可以通過增加該變數值以               #及記憶體緩衝區大小提高其效能。和sort_buffer_size一樣,該參數對應的分配記憶體也是每個串連獨享。
read_rnd_buffer_size = 16M   # MySql的隨機讀(查詢操作)緩衝區大小。當按任意順序讀取行時(例如,按照排序次序),將分配一個隨機讀緩衝區。進行排序查詢時,MySql會首先掃描一遍該緩衝,以避免磁碟搜尋,提高查詢速度,如果需要排序大量資料,可適當調高該值。但My                  #Sql會為每個客戶串連發放該緩衝空間,所以應盡量適當設定該值,以避免記憶體開銷過大。
bulk_insert_buffer_size = 64M   #批量插入資料緩衝大小,可以有效提高插入效率,預設為8M
myisam_sort_buffer_size = 128M   # MyISAM表發生變化時重新排序所需的緩衝
myisam_max_sort_file_size = 10G   # MySQL重建索引時所允許的最大臨時檔案的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).
                     # 如果檔案大小比此值更大,索引會通過索引值緩衝建立(更慢)
myisam_max_extra_sort_file_size = 10G 
myisam_repair_threads = 1   # 如果一個表擁有超過一個索引, MyISAM 可以通過並行排序使用超過一個線程去修複他們.
                  # 這對於擁有多個CPU以及大量記憶體情況的使用者,是一個很好的選擇.
myisam_recover   #自動檢查和修複沒有適當關閉的 MyISAM 表
skip-name-resolvelower_case_table_names = 1 server-id = 1
innodb_additional_mem_pool_size = 16M   #這個參數用來設定 InnoDB 儲存的資料目錄資訊和其它內部資料結構的記憶體池大小,類似於Oracle的library cache。這不是一個強制參數,可以被突破。
innodb_buffer_pool_size = 2048M   #這對Innodb表來說非常重要。Innodb相比MyISAM表對緩衝更為敏感。MyISAM可以在預設的 key_buffer_size 設定下啟動並執行可以,然而Innodb在預設的 innodb_buffer_pool_size 設定下卻跟蝸牛似的。由於Innodb把資料和索引都緩                     #存起來,無需留給作業系統太多的記憶體,因此如果只需要用Innodb的話則可以設定它高達 70-80% 的可用記憶體。一些應用於 key_buffer 的規則有 — 如果你的資料量不大,並且不會暴增,那麼無需把 innodb_buffer_pool_size 設定的                     #太大了
innodb_data_file_path = ibdata1:1024M:autoextend   #資料表空間檔案 重要資料
innodb_file_io_threads = 4   #檔案IO的線程數,一般為 4,但是在 Windows 下,可以設定得較大。
innodb_thread_concurrency = 8   #伺服器有幾個CPU就設定為幾,建議用預設設定,一般為8.
innodb_flush_log_at_trx_commit = 2   # 如果將此參數設定為1,將在每次提交事務後將日誌寫入磁碟。為提供效能,可以設定為0或2,但要承擔在發生故障時遺失資料的風險。設定為0表示交易記錄寫入記錄檔,而記錄檔每秒重新整理到磁碟一次。設定為2表示交易記錄將在提交時                       #寫入日誌,但記錄檔每次重新整理到磁碟一次
innodb_log_buffer_size = 16M     #此參數確定些記錄檔所用的記憶體大小,以M為單位。緩衝區更大能提高效能,但意外的故障將會遺失資料.MySQL開發人員建議設定為1-8M之間
innodb_log_file_size = 128M     #此參數確定資料記錄檔的大小,以M為單位,更大的設定可以提高效能,但也會增加恢複故障資料庫所需的時間
innodb_log_files_in_group = 3   #為提高效能,MySQL可以以迴圈方式將記錄檔寫到多個檔案。推薦設定為3M
innodb_max_dirty_pages_pct = 90   #推薦閱讀 http://www.taobaodba.com/html/221_innodb_max_dirty_pages_pct_checkpoint.html
                     # Buffer_Pool中Dirty_Page所佔的數量,直接影響InnoDB的關閉時間。參數innodb_max_dirty_pages_pct 可以直接控制了Dirty_Page在Buffer_Pool中所佔的比率,而且幸運的是innodb_max_dirty_pages_pct是可以動態改變的                     #。所以,在關閉InnoDB之前先將innodb_max_dirty_pages_pct調小,強制資料區塊Flush一段時間,則能夠大大縮短 MySQL關閉的時間。
innodb_lock_wait_timeout = 120   # InnoDB 有其內建的死結檢測機制,能導致未完成的交易回復。但是,如果結合InnoDB使用MyISAM的lock tables 語句或第三方事務引擎,則InnoDB無法識別死結。為消除這種可能性,可以將innodb_lock_wait_timeout設定為一個整數值                    #,指示 MySQL在允許其他事務修改那些最終受交易回復的資料之前要等待多長時間(秒數)
innodb_file_per_table = 0     #獨享資料表空間(關閉)
[mysqldump] quick max_allowed_packet = 32M [mysqld_safe] log-error=/data/3306/mysql_oldboy.err pid-file=/data/3306/mysqld.pid
補充: #wait_timeout = 10  #指定一個請求的最大連線時間,對於4GB左右的記憶體伺服器來說,可以將其設定為5-10。 #skip_networking  #開啟該選可以徹底關閉MYSQL的TCP/IP串連方式,如果WEB伺服器是以遠端連線的方式訪問MYSQL資料庫伺服器的,則不要開啟該選項,否則將無法正常串連。  #log-queries-not-using-indexes 將沒有使用索引的查詢也記錄下來

mysql服務效能最佳化—my.cnf配置說明詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.