MySQL的my.cnf配置參數詳解

來源:互聯網
上載者:User
 key_buffer

  索引塊是緩衝的並且被所有的線程共用。key_buffer_size是用於索引塊的緩衝區大小,增加它可得到更好處理的索引(對所有讀和多重寫),到你能負擔得起那樣多。如果你使它太大,系統將開始換頁並且真的變慢了。預設數值是8388600(8M),我的 MySQL主機有2GB記憶體,所以我把它改為402649088(400MB)

  max_connections

  允許的同時客戶的數量。增加該值增加 mysqld 要求的檔案描述符的數量。這個數字應該增加,否則,你將經常看到 Too many connections 錯誤。 預設數值是100

  max_allowed_packet

  匯入時一個包的最大尺寸。訊息緩衝區被初始化為net_buffer_length位元組,但是可在需要時增加到max_allowed_packet個位元組。預設地,該值太小必能捕捉大的(可能錯誤)包。如果你正在使用大的BLOB列,你必須增加該值。它應該象你想要使用的最大BLOB的那麼大。

  table_cache

  為所有線程開啟表的數量。增加該值能增加mysqld要求的檔案描述符的數量。MySQL對每個唯一開啟的表需要2個檔案描述符。預設數值是64,我把它改為512

  

  

  配置Myisam表的參數:

  record_buffer_size

  每個進行一個順序掃描的線程為其掃描的每張表分配這個大小的一個緩衝區。如果你做很多順序掃描,你可能想要增加該值。預設數值是131072(128K),我把它改為16773120 (16M)

  sort_buffer_size

  每個需要進行排序的線程分配該大小的一個緩衝區。增加這值加速ORDER BY或GROUP BY操作。預設數值是2097144(2M),我把它改為 16777208 (16M)

  read_buffer_size

  Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you might want to increse this value

  

  read_rnd_buffer_size

   When reading rows in sorted order after a sort, the rows are read through this buffer to avoid disk seeks. Setting the variable to a large value can improve ORDER BY performance by a lot. However, this is a buffer allocated for each client, so you should
not set the global variable to a large value. Instead, change the session variable only from within those clients that need to run large queries.

  Bulk_insert_buffer_size

  該參數於4.0.3中引入。MyISAM使用一個樹型的緩衝區來加速大量的插入,如INSERT…SELECT,INSERT…VALUES(…), VALUES(…),…,LOAD DATA INFILE等。該參數指定了緩衝區的大小。預設值為8M,設定為0則表示不使用該最佳化。如果不使用MyISAM表,則可以將其設定為0。

  myisam_sort_buffer_size

  

  配置InnoDB表的參數

  innodb_buffer_pool_size

  innodb_buffer_pool_size的作用就相當於key_buffer_size對於MyISAM表的作用一樣。InnoDB使用該參數指定大小的記憶體來緩衝資料和索引。對於單獨的MySQL資料庫伺服器,最大可以把該值設定成實體記憶體的80%。根據MySQL手冊,對於2G記憶體的機器,推薦值是1G(50%)

  innodb_flush_log_at_trx_commit

  該值指定InnoDB記錄日誌的方式。如果設定為1,則每個事務提交的時候,MySQL都會將交易記錄寫入磁碟。如果設定為0或者2,則大概每秒中將日誌寫入磁碟一次。(還不清楚0和2的區別)。實際測試發現,該值對插入資料的速度影響非常大,設定為2時插入10000條記錄只需要2秒,設定為0時只需要1秒,而設定為1時則需要229秒。因此,MySQL手冊也建議盡量將插入操作合并成一個事務,這樣可以大幅提高速度。根據MySQL手冊,在存在丟失最近部分事務的危險的前提下,可以把該值設為0。

  innodb_log_file_size

  The size of the buffer that InnoDB uses to write to the log files on disk. Sensible values range from 1MB to 8MB. The default is 1MB. A large log buffer allows large transactions to run without a need to write the log to disk before the transactions commit.
Thus, if you have big transactions, making the log buffer larger will save disk I/O。根據MySQL手冊,推薦值是innodb_buffer_pool_size的25%

  注意:在重新設定該值時,好像要把原來的檔案刪除掉。

  innodb_log_buffer_size

  The size of the buffer that InnoDB uses to write to the log files on disk. Sensible values range from 1MB to 8MB. The default is 1MB. A large log buffer allows large transactions to run without a need to write the log to disk before the transactions commit.
Thus, if you have big transactions, making the log buffer larger will save disk I/O. 根據MySQL手冊,推薦值是8M。

  innodb_additional_mem_pool_size

  該參數指定InnoDB用來儲存資料字典和其他內部資料結構的記憶體池大小。預設值是1M。通常不用太大,只要夠用就行,應該與表結構的複雜度有關係。如果不夠用,MySQL會在錯誤記錄檔中寫入一條警告資訊。根據MySQL手冊,對於2G記憶體的機器,推薦值是20M。

  thread_cache_size

  可以複用的儲存在中的線程的數量。如果有,新的線程從緩衝中取得,當中斷連線的時候如果有空間,客戶的線置在緩衝中。如果有很多新的線程,為了提高效能可以這個變數值。通過比較 Connections 和 Threads_created 狀態的變數,可以看到這個變數的作用。我把它設定為 80

  query_cache_size

  查詢緩衝,MySQL將SELECT語句和查詢結果存放在緩衝區中,今後對於同樣的SELECT語句(區分大小寫),將直接從緩衝區中讀取結果。通過檢查狀態值Qcache_*,可以知道query_cache_size設定是否合理(上述狀態值可以使用SHOW STATUS LIKE ‘Qcache%’獲得)。如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩衝不夠的情況,如果Qcache_hits的值也非常大,則表明查詢緩衝使用非常頻繁,此時需要增加緩衝大小;如果Qcache_hits的值不大,則表明你的查詢重複率很低,這種情況下使用查詢緩衝反而會影響效率,那麼可以考慮不用查詢緩衝。此外,在SELECT語句中加入SQL_NO_CACHE可以明確表示不使用查詢緩衝。與查詢緩衝有關的參數還有query_cache_type、query_cache_limit、query_cache_min_res_unit。
query_cache_type指定是否使用查詢緩衝,可以設定為0、1、2,該變數是SESSION級的變數。query_cache_limit指定單個查詢能夠使用的緩衝區大小,預設為1M。query_cache_min_res_unit是在4.1版本以後引入的,它指定分配緩衝區空間的最小單位,預設為4K。檢查狀態值Qcache_free_blocks,如果該值非常大,則表明緩衝區中片段很多,這就表明查詢結果都比較小,此時需要減小 query_cache_min_res_unit。

  query_cache_limit

  定單個查詢能夠使用的緩衝區大小,預設為1M

  query_cache_min_res_unit

  指定分配緩衝區空間的最小單位,預設為4K

  檢查狀態值Qcache_free_blocks,如果該值非常大,則表明緩衝區中片段很多,這就表明查詢結果都比較小,此時需要減小query_cache_min_res_unit。

  thread_concurrency

  設定為你的cpu數目x2,例如,只有一個cpu,那麼thread_concurrency=2

  skip-innodb

  去掉innodb支援

  skip-bdb

  去掉bdb事務型表支援

  skip-name-resolve

  解決mysql不能遠端連線的問題

  max_allowed_packet

  資訊交換中使用資訊包的允許大小(如:匯入表)


附一個配置

[mysqld]port            = 3306socket          = /tmp/mysql.sockskip-lockingkey_buffer = 256Mmax_allowed_packet = 8Mtable_cache = 1024sort_buffer_size = 64Mnet_buffer_length = 8Kread_buffer_size = 16Mread_rnd_buffer_size = 16Mmyisam_sort_buffer_size = 128Mdefault-table-type=innodbinnodb_buffer_pool_size = 1024Minnodb_additional_mem_pool_size = 128Minnodb_flush_log_at_trx_commit = 0innodb_log_file_size = 256Minnodb_log_buffer_size = 8Mlong_query_time = 1log-slow-queries = /usr/local/mysql/var/log-slow.logskip-name-resolvelog_bin_trust_routine_creators=1max_connections = 2048query_cache_size = 128Mrecord_buffer = 32Mback_log = 500#interactive_timeout = 7200interactive_timeout = 2880000thread_cache_size = 80#wait_timeout = 720wait_timeout = 2880000max_connect_errors=100tmp_table_size = 512Mlog = /usr/local/mysql/var/query.log


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.