程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MYSQL表優化方法

MYSQL表優化方法

編輯:關於MYSQL數據庫
同時在線訪問量繼續增大   對於1G內存的服務器明顯感覺到吃力嚴重時甚至每天都會死機   或者時不時的服務器卡一下   這個問題曾經困擾了我半個多月MySQL使用是很具伸縮性的算法,因此你通常能用很少的內存運行或給MySQL更多的被存以得到更好的性能。  安裝好mysql後,配制文件應該在/usr/local/mysql/share/mysql目錄中,配制文件有幾個,有 my-   huge.cnf   my-medium.cnf   my-large.cnf   my-small.cnf,不同的流量的網站和不同配制的服務器環境,當然需要有不同的配制文件了。  一般的情況下,my-medium.cnf這個配制文件就能滿足我們的大多需要;一般我們會把配置文件拷貝到/etc/my.cnf   只需要修改這個配置文件就可以了,使用 mysqladmin   variables   extended-status   Cu   root   Cp   可以看到目前的參數,有3個配置參數是最重要的,即key_buffer_size,query_cache_size,table_cache。  key_buffer_size只對MyISAM表起作用,  key_buffer_size 指定索引緩沖區的大小,它決定索引處理的速度,尤其是索引讀的速度。一般我們設為16M,實際上稍微大一點的站點 這個數字是遠遠不夠的,通過檢查狀態值 Key_read_requests和Key_reads,可以知道key_buffer_size設置是否合理。比例 key_reads   /   key_read_requests應該盡可能的低,至少是1:100,1:1000更好(上述狀態值可以使用 SHOW   STATUS   LIKE   ‘key_read%’獲得)。   或者如果你裝了phpmyadmin   可以通過服務器運行狀態看到,筆者推薦用phpmyadmin管理MySQL,以下的狀態值都是本人通過PHPmyadmin獲得的實例分析:  這個服務器已經運行了20天  key_buffer_size   C   128M   
key_read_requests   C   650759289   
key_reads   -   79112   
得到以下狀態:  Open   tables   256   
Opened   tables   9046    雖然open_tables已經等於table_cache,但是相對於服務器運行時間來說,已經運行了20天,opened_tables的值也非常低。因此,增加table_cache的值應該用處不大。如果運行了6個小時就出現上述值   那就要考慮增大table_cache。  如果你不需要記錄2進制log   就把這個功能關掉,注意關掉以後就不能恢復出問題前的數據了,需要您手動備份,二進制日志包含所有更新數據的語句,其目的是在恢復數據庫時用它來把數據盡可能恢復到最後的狀態。另外,如果做同步復制(   Replication   )的話,也需要使用二進制日志傳送修改情況。  [Page]log_bin指定日志文件,如果不提供文件名,MySQL將自己產生缺省文件名。MySQL會在文件名後面自動添加數字引,每次啟動服務時,都會重新生成一個新的二進制文件。此外,使用log-bin-index可以指定索引文件;使用binlog-do-db 可以指定記錄的數據庫;使用binlog-ignore-db可以指定不記錄的數據庫。注意的是:binlog-do-db和binlog- ignore-db一次只指定一個數據庫,指定多個數據庫需要多個語句。而且,MySQL會將所有的數據庫名稱改成小寫,在指定數據庫時必須全部使用小寫名字,否則不會起作用。  關掉這個功能只需要在他前面加上#號  #log-bin    開啟慢查詢日志(   slow   query   log   )   慢查詢日志對於跟蹤有問題的查詢非常有用。它記錄所有查過long_query_time的查詢,如果需要,還可以記錄不使用索引的記錄。下面是一個慢查詢日志的例子:  開啟慢查詢日志,需要設置參數log_slow_queries、long_query_times、log-queries-not-using-indexes。  log_slow_querIEs 指定日志文件,如果不提供文件名,MySQL將自己產生缺省文件名。long_query_times指定慢查詢的阈值,缺省是10秒。log- querIEs-not-using-indexes是4.1.0以後引入的參數,它指示記錄不使用索引的查詢。筆者設置 long_query_time=10  筆者設置:  sort_buffer_size   =   1M   
max_connections=120   
wait_timeout   =120   
back_log=100   
read_buffer_size   =   1M   
thread_cache=32   
interactive_timeout=120   
thread_concurrency   =   4    參數說明:  back_log  要求MySQL能有的連接數量。當主要MySQL線程在一個很短時間內得到非常多的連接請求,這就起作用,然後主線程花些時間(盡管很短)   檢查連接並且啟動一個新線程。back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中。只有如果期望在一個短時間內有很多連接,你需要增加它,換句話說,這值對到來的TCP/IP連接的偵聽隊列的大小。你的操作系統在這個隊列大小上有它自己的限制。   Unix   listen(2)系統調用的手冊頁應該有更多的細節。檢查你的OS文檔找出這個變量的最大值。試圖設定back_log高於你的操作系統的限制將是無效的。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved