程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> MYSQL教程:優化服務器參數設置

MYSQL教程:優化服務器參數設置

編輯:更多數據庫知識

MySQL服務器為我們提供了豐富的參數,以調整服務器滿足不同環境的要求。下面分別討論一下這些參數:

本文由網頁教學網(http://www.webjx.com)整理發布!轉載請注明出處,謝謝!

  • 服務器參數變量的設置。MySQL服務器參數可在服務器啟動時設置,在MySQL4.0.3及以後的版本中,有些參數也允許在線設置。在MySQL4.0.2及以後的版本裡,可以把一個變量名視為一個選項名來設置。如數據表緩沖區的尺寸由服務器參數talbe_cache來設置。如果需把它設置為128,則可以在命令行裡增加

    --table_cache=128
    

    也可在選項文件中設置:

    [mysqld]
    table_cache=128       
    

    在命令行選項中'_'可寫'-',變成:

    --table-cache=128     #這種寫法更像一個標准選項
    

    還有一種是使用--set-variable或-O選項,如:

    --set-variable=table_cache=128
    or
    -O table_cache=128
    在選項文件中可寫成:
    [mysqld]
    set-variable=table_cache=128
    

    服務器參數分為全局級和會話級兩個級別。全局級參數將影響整個服務器,會話級參數則只影響某給定客戶連接上的工作。如果某個變量同時存在於兩個級別,則服務器在客戶建立連接時用全局變量的值去初始化相應的會話級參數,一旦客戶連接建立起來後,對全局參數所作的修改不會影響到相應的會話級參數當前值。設置全局參數和會話級參數的語句:

    全局級:
    mysql> SET GLOBAL variable = value;
    mysql> SET @@GLOBAL.variable = value;
    會話級:
    mysql> SET SESSION variable = value;
    mysql> SET @@SESSION.variable = value;
    默認不帶級別限定符的SET語句修改的參數屬會話級,如:
    mysql> SET variable = value;
    mysql> SET @@variable = value;
    可用一條SET語句設置多個參數,參數間用逗號分隔,如:
    SET SESSION variable = value1,value2,value3;
    

    SESSION和LOCAL是同義語,可用LOCAL代替SESSION,如:@@LOCAL

    具備SUPER權限才能設置全局參數,新設置值的效力將持續到該參數被再次修改或服務器退出。設置會話級參數不用特殊的權限,新設置值的效力將持續到該值被再次修改或連接斷開。顯示參數的語句如下:

    SHOW GLOBAL VARIABLES;
    SHOW GLOBAL VARIABLES LIKE 'TEST';
    SHOW SESSION VARIABLES;
    SHOW SESSION VARIABLES LIKE 'TEST';
    如不帶限定符,則返回會話級參數,如會話級參數不存在則返回全局級參數。
    也可用命令行方式顯示服務器參數變量,如:
    % mysqladmin variables
    
  • 下面介紹一些MySQL服務器通用的參數變量:

    • back_log,當多個客戶同時連接服務器時,客戶處理過程需進入一個隊列排隊等待服務器處理。該值定義服務器等待處理隊列長度的最大值,如果站點訪問量大,需加大該值。

    • delayed_queue_size,在實際插入數據表前,來自insert delayed語句的數據行會進入一個隊列等待服務器處理。該值定義該隊列能容納的數據行的最大個數。當隊列滿時,會阻塞後續的語句。加大該值能提高insert delayed語句的執行速度。

    • flush_time,自動存盤間隔。如果系統經常死機或重啟,把這個變量設置為一個適當的非零值,使MySQL服務器每隔flush_time稱去刷新一次數據表緩沖區,將其中的信息寫入磁盤。這將導致系統性能下降,但可減少數據表被破壞或丟失數據的概率。在命令行上用--flush選項啟動服務器可使數據表在每次修改後被自動存盤。

    • key_buffer_size,用來容納索引塊的緩沖區的長度。加大該值可加快索引創建和修改操作的速度,該索引緩沖區越大,在內存中找到鍵值的可能性就越大,讀盤次數就越少。MySQL3.23前的版本裡,該參數叫key_buffer。3.23版本之後,兩種叫法都可以。

    • max_allowed_packet,服務器與客戶程序之間通信時使用的緩沖區在最大值。MySQL 4版本之前,該最大值可取16MB,MySQL 4版本以後,該值的最大值是1GB。如果客戶端與服務器需傳送大容量的數據,如BLOB或TEXT值,就要加大該值。客戶端也有一個同名的變量,默認是16MB,該值也要加大。客戶端的啟動命令為:

      % mysql --set-variable=max_allowed_packet=64M
      
    • max_connections,允許同時打開的連接數,如果站點繁忙,需加大該值。

    • table_cache,數據表緩存區的尺寸。加大該值可使服務器能夠同時打開更多的數據表,從而減少文件打開/關閉操作的次數。

    注意:加大max_connections和table_cache參數的值,會使服務器占用更多的文件描述符。運行多個服務器可繞過該限制。對一些分配給每個客戶的資源變量,設置時不能過大,因為當連接數快速增長時會很快耗盡服務器的資源,造成服務器性能下降。

  • InnoDB處理程序變量:

    • innodb_buffer_pool_size,InnoDB數據庫緩沖池的大小,如果有足夠的內存,可把該值設置得大些以減少讀盤操作。

    • innodb_log_file_size和innodb_log_files_in_group,前者設置日志文件的長度,後者設置日志文件的個數。InnoDB日志文件的總長度是兩者的乘積,它的總長度不得超過4GB。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved