收藏本站 收藏本站
積木網首頁 - 軟件測試 - 常用手冊 - 站長工具 - 技術社區
首頁 > 數據庫 > MySQL > 正文

首頁 - PHP - 數據庫 - 操作系統 - 游戲開發 - JS - Android - MySql - Redis - MongoDB - Win8 - Shell編程 - DOS命令 - jQuery - CSS樣式 - Python - Perl

Access - Oracle - DB2 - SQLServer - MsSql2008 - MsSql2005 - Sqlite - PostgreSQL - node.js - extjs - JavaScript vbs - Powershell - Ruby

mysql優化的重要參數 key_buffer_size table_cache

MySQL服務器端的參數有很多,但是對于大多數初學者來說,眾多的參數往往使得我們不知所措,但是哪些參數是需要我們調整的,哪些對服務器的性能影響最大呢?對于使用Myisam存儲引擎來說,主要有key_buffer_size和table_cache兩個參數。對于InnoDB引擎來說主要還是以innodb_開始的參數,也很好辨認。

查看MySQL參數,可以使用show variables和show status命令查看,前者查看服務器靜態參數,即在數據庫啟動后不會動態更改的值,比如緩沖區、字符集等。后者查看服務器的動態運行狀態信息,即數據庫運行期間動態變化的信息,比如鎖,當前連接數等。

key_buffer_size這個參數是用來設置索引塊(index blocks)緩存的大小,它被所有線程共享,嚴格說是它決定了數據庫索引處理的速度,尤其是索引讀的速度。那我們怎么才能知道key_buffer_size的設置是否合理呢,一般可以檢查狀態值Key_read_requests和Key_reads,比例key_reads / key_read_requests應該盡可能的低,比如1:100,1:1000 ,1:10000。其值可以用以i下命令查得:

mysql> show status like 'key_read%';
+-------------------+------------+
| Variable_name | Value |
+-------------------+------------+
| Key_read_requests | 3916880184 |
| Key_reads | 1014261 |
+-------------------+------------+
2 rows in set (0.00 sec)

3916880184/1024/1024=?M //單位為兆

查看圖片

我的key_buffer_size值為:

查看圖片

key_buffer_size=536870912/1024/1024=512M,

key_reads / key_read_requests=1014261: 3916880184≈1:4000,照上面來看,健康狀況還行。

table_cache指定表高速緩存的大小。每當MySQL訪問一個表時,如果在表緩沖區中還有空間,該表就被打開并放入其中,這樣可以更快地訪問表內容。通過檢查峰值時間的狀態值Open_tables和Opened_tables,可以決定是否需要增加table_cache的值。如果你發現open_tables等于table_cache,并且opened_tables在不斷增長,那么你就需要增加table_cache的值了(上述狀態值可以使用SHOW STATUS LIKE ‘Open%tables'獲得)。注意,不能盲目地把table_cache設置成很大的值。如果設置得太高,可能會造成文件描述符不足,從而造成性能不穩定或者連接失敗。

查看圖片

查看圖片

open_tables表示當前打開的表緩存數,如果執行flush tables操作,則此系統會關閉一些當前沒有使用的表緩存而使得此狀態值減小;

opend_tables表示曾經打開的表緩存數,會一直進行累加,如果執行flush tables操作,值不會減小。

在mysql默認安裝情況下,table_cache的值在2G內存以下的機器中的值默認時256到512,如果機器有4G內存,則默認這個值是2048,但這決意味著機器內存越大,這個值應該越大,因為table_cache加大后,使得mysql對SQL響應的速度更快了,不可避免的會產生更多的死鎖(dead lock),這樣反而使得數據庫整個一套操作慢了下來,嚴重影響性能。所以平時維護中還是要根據庫的實際情況去作出判斷,找到最適合你維護的庫的table_cache值。

就是table_cache加大后碰到文件描述符不夠用的問題,在mysql的配置文件中有這么一段提示:
引用
“The number of open tables for all threads. Increasing this value increases the number of file descriptors that mysqld requires.
Therefore you have to make sure to set the amount of open files allowed to at least 4096 in the variable "open-files-limit" in” section [mysqld_safe]”
說的就是要注意這個問題,一想到這里,部分兄弟可能會用ulimit -n 作出調整,但是這個調整實際是不對的,換個終端后,這個值又會回到原始值,所以最好用sysctl或者修改/etc/sysctl.conf文件,同時還要在配置文件中把open_files_limit這個參數增大,對于4G內存服務器,相信現在購買的服務器都差不多用4G的了,那這個這個open_files_limit至少要增大到4096,如果沒有什么特殊情況,設置成8192就可以了。

innodb_buffer_pool_size 這個參數和MyISAM的key_buffer_size有相似之處,但也是有差別的。這個參數主要緩存innodb表的索引,數據,插入數據時的緩沖。為Innodb加速優化首要參數。  該參數分配內存的原則:這個參數默認分配只有8M,可以說是非常小的一個值。如果是一個專用DB服務器,那么他可以占到內存的70%-80%。這個參數不能動態更改,所以分配需多考慮。分配過大,會使Swap占用過多,致使Mysql的查詢特慢。如果你的數據比較小,那么可分配是你的數據大小+10%左右做為這個參數的值。

mysql主鍵的缺少導致備庫hang住
最近線上頻繁的出現slave延時的情況,經排查發現為用戶在刪除數據的時候,由于表主鍵的主鍵的缺少,同時刪除條件沒有索引,或或者刪除的條件過濾

mysql同步問題之Slave延遲很大優化方法
一般而言,slave相對master延遲較大,其根本原因就是slave上的復制線程沒辦法真正做到并發。簡單說,在master上是并發模式(以InnoDB引擎為主)完成事務提

MySQL-tpch 測試工具簡要手冊
tpch是TPC(TransactionProcessingPerformanceCouncil)組織提供的工具包。用于進行OLAP測試,以評估商業分析中決策支持系統(DSS)的性能。它包含了一整套面向商業

本周排行

更新排行

強悍的草根IT技術社區,這里應該有您想要的! 友情鏈接:b2b電子商務
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP備05050695號
手游棋牌游戏运营
时时彩平台官方网 6合6码是什么数字 时时彩杀6码01 快乐时时走势图 mg藏分不让出款 8六肖 广东时时开奖 时时彩投注平台 五百万彩票app ag揭秘 时时彩正确的倍投方法 福建时时官网下载 重庆时时彩开奖直播 128福彩官网 好运来电玩城安卓版 挂机模式