標籤

4GL (1) 人才發展 (10) 人物 (3) 太陽能 (4) 心理 (3) 心靈 (10) 文學 (31) 生活常識 (14) 光學 (1) 名句 (10) 即時通訊軟體 (2) 奇狐 (2) 音樂 (2) 產業 (5) 郭語錄 (3) 無聊 (3) 統計 (4) 新聞 (1) 經濟學 (1) 經營管理 (42) 解析度 (1) 遊戲 (5) 電學 (1) 網管 (10) 廣告 (1) 數學 (1) 機率 (1) 雜趣 (1) 證券 (4) 證券期貨 (1) ABAP (15) AD (1) agentflow (4) AJAX (1) Android (1) AnyChart (1) Apache (14) BASIS (4) BDL (1) C# (1) Church (1) CIE (1) CO (38) Converter (1) cron (1) CSS (23) DMS (1) DVD (1) Eclipse (1) English (1) excel (5) Exchange (4) Failover (1) FI (57) File Transfer (1) Firefox (2) FM (2) fourjs (1) gladiatus (1) google (1) Google Maps API (2) grep (1) Grub (1) HR (2) html (23) HTS (8) IE (1) IE 8 (1) IIS (1) IMAP (3) Internet Explorer (1) java (3) JavaScript (22) jQuery (6) JSON (1) K3b (1) LED (3) Linux (112) Linux Mint (4) Load Balance (1) Microsoft (2) MIS (2) MM (51) MSSQL (1) MySQL (27) Network (1) NFS (1) Office (1) Oracle (125) Outlook (3) PDF (6) Perl (59) PHP (33) PL/SQL (1) PL/SQL Developer (1) PM (3) Postfix (2) postfwd (1) PostgreSQL (1) PP (50) python (1) QM (1) Red Hat (4) Reporting Service (28) ruby (11) SAP (234) scp (1) SD (16) sed (1) Selenium-WebDriver (5) shell (5) SQL (4) SQL server (8) SQuirreL SQL Client (1) SSH (2) SWOT (3) Symantec (2) T-SQL (7) Tera Term (2) tip (1) tiptop (22) Tomcat (6) Trouble Shooting (1) Tuning (5) Ubuntu (33) ufw (1) utf-8 (1) VIM (11) Virtual Machine (2) vnc (3) Web Service (2) wget (1) Windows (19) Windows (1) WM (6) youtube (1) yum (2)

2014年7月2日 星期三

MySQL 設定檔優化-cache

http://article.denniswave.com/6345

From:http://www.bsdlover.cn/html/89/n-1789.html
  • thread_concurrency
  • 數量設置為CPU核心數量的兩倍.
  • thread_cache_size
  • 按照內存大小來設置, 1G=8, 2G=16, 3G=32, >3G=64

  • wait_timeout
  • 超時時間,如果連接數比較大,可以減少此參數的值,我使用的是10
  • max_connections
  • 最大連接數,mysql實際允許連接數的值是max_connections+1,按照系統庫不同而有不同性能。一般是500~1000,MySQL AB提供的linux靜態庫可以達到4000。
  • query_cache_size
  • 查詢緩衝,默認是0,所以必須打開以提高mysql性能,其本身需要40K來保存結構數據。所以不能設置的太小,初期可以設置成32M,然後根據實際運行情況另行調整。
  • query_cache_type
  • 指定查詢緩衝的類型:
    0是關閉
    1是緩衝除了使用 SELECT SQL_NO_CACHE 語句指明了不需要緩衝的數據意外的所有查詢
    2是只緩衝 SELECT SQL_CACHE 指定的查詢
    一般設置為1
  • query_cache_limit
  • 允許進入查詢緩衝區的最小數據大小,默認值是1MB,可以修改的小一點以滿足更多查詢的需求。但是如果設置的過於小,則會導致很多新的小查詢的結果將原有的查詢結果交換出去,增加系統的顛簸。
相關命令
  • 查詢mysql服務器相關狀態數據
  • >SHOW STATUS;
  • 查詢mysql服務器相關配置選項
  • >SHOW VARIABLES;
  • 整理查詢緩衝區裡的碎片
  • >flush query cache;
  • 刪除查詢緩衝區裡的所有內容
  • >reset query cache;
  • 設置mysql參數
  • >SET GLOBAL;
  • 查詢mysql當前執行的sql語句
  • >show processlist;
變量含義
  • 查詢緩存中的空閒內存塊的數目
  • Qcache_free_blocks
  • 查詢緩存的空閒內存總數
  • Qcache_free_memory
  • 緩存採樣數數目
  • Qcache_hits
  • 被加入到緩存中的查詢數目
  • Qcache_inserts
  • 因為缺少內存而被從緩存中刪除的查詢數目
  • Qcache_lowmem_prunes
  • 沒有被緩存的查詢數目 (不能被緩存的,或由於 QUERY_CACHE_TYPE)
  • Qcache_not_cached
  • 在緩存中已註冊的查詢數目
  • Qcache_queries_in_cache
  • 查詢緩存中的塊的總數目
  • Qcache_total_blocks
MySQL查詢優化
查詢Cache狀態
>SHOW STATUS LIKE 'Qcache%';
如果Qcache_lowmem_prunes非常大,說明因為內存不足而被交換出cache的數據很多.如果增加內存.可以保證較小的交換次數以及較高的命中率
例如現在我們查詢的結果如下:
Qcache_free_blocks 1234
Qcache_free_memory 25957504
Qcache_hits 55771119
Qcache_inserts 7441153
Qcache_lowmem_prunes 28332
Qcache_not_cached 1233788
Qcache_queries_in_cache 4810
Qcache_total_blocks 11038
設置為64M cache內存後
>set global query_cache_size=67108864;
Qcache_free_blocks 1
Qcache_free_memory 66623616
Qcache_hits 55788258
Qcache_inserts 7445445
Qcache_lowmem_prunes 28332
Qcache_not_cached 1234057
Qcache_queries_in_cache 183
Qcache_total_blocks 392
自由內存塊看起來變小了。
是因為現在自由內存塊是一個整塊,而以前的內存塊都是分散的小塊。而因為重建了cache區,Qcache_queries_in_cache 變量變小了。因為此操作重新建立了cache內存區,所有數據重新緩存,在運行一兩天後我們再看此數據。如果變大了,說明增大cache內存區域是有效 的,如果和以前數據差不多說明增加的內存並沒有實際起到多大的作用。
有人會覺得如果我將cache內存設置的非常大,然後將cache_limit設置成0,那麼所有查詢都會被緩存了。理論上是這樣,但是一台數據庫 服務器的查詢非常多,如果連查詢單條數據都要緩存,那麼內存再大也會不夠的。到時候老的內容就會被交換出去,當cache內存使用滿的時候,就會不停的有 新查詢進來將老查詢替換出去。
這樣導致兩個結果:一個是內存顛簸,效率反而下降;第二個是cache內存的小碎塊增多,內存利用率降低。如果是只有內容很少的小庫,並且查詢率不高,是可以使用這種方法提高響應速度。但是如果是實際生產環境,數據量會比較大,還是需要按照最佳比例來配置。
而不同的應用不同的數據量會有不同的搭配,這點大家不要看網上的優化配置隨便的填寫,還是要時時的查看mysql的狀態進行調整。即便是這個月調整好的優化參數,到了下個月業務不同,數據量增加,也會需要調整的。

沒有留言:

張貼留言