国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

數據庫Mysql性能優化詳解

2024-07-24 13:09:35
字體:
來源:轉載
供稿:網友

在mysql數據庫中,mysql key_buffer_size是對MyISAM表性能影響最大的一個參數(注意該參數對其他類型的表設置無效),下面就將對mysql Key_buffer_size參數的設置進行詳細介紹下面為一臺以MyISAM為主要存儲引擎服務器的配置:

mysql> show variables like 'key_buffer_size';+-----------------+------------+| Variable_name | Value |+-----------------+------------+| key_buffer_size | |+-----------------+------------+ 

分配了512MB內存給mysql key_buffer_size,我們再看一下key_buffer_size的使用情況:

mysql> show global status like 'key_read%';+------------------------+-------------+| Variable_name | Value |+------------------------+-------------+| Key_read_requests | | //從緩存讀取索引的請求次數。| Key_reads | | //從磁盤讀取索引的請求次數。+------------------------+-------------+ 

一共有27813678764個索引讀取請求,有6798830個請求在內存中沒有找到直接從硬盤讀取索引,計算索引未命中緩存的概率:

key_cache_miss_rate = Key_reads / Key_read_requests * 100% 

比如上面的數據,key_cache_miss_rate為0.0244%,4000個索引讀取請求才有一個直接讀硬盤,已經很BT了,key_cache_miss_rate在0.1%以下都很好(每1000個請求有一個直接讀硬盤),所以理論來上來說,這個比值越小越好,但過小的話,難免造成內存浪費。

以上兩個值的比率固然能一部分的說明key_buffer_size是否合理,但僅僅以此就說明該值設置的合理的話,就過于偏激和片面了。因為這里忽略了兩個問題:

1、比例并不顯示數量的絕對值大小

2、計數器并沒有考慮時間因素

雖說Key_read_requests大比小好,但是對于系統調優而言,更有意義的應該是單位時間內的Key_reads,即:

Key_reads / Uptime

具體查看方法如下:

[root@web mysql]# mysqladmin ext -uroot -p -ri | grep Key_readsEnter password:| Key_reads | || Key_reads | || Key_reads | || Key_reads | || Key_reads | || Key_reads | || Key_reads | || Key_reads | || Key_reads | || Key_reads | | 

注:命令里的mysqladmin ext其實就是mysqladmin extended-status,你甚至可以簡寫成mysqladmin e。

其中第一行表示的是匯總數值,所以這里不必考慮,下面的每行數值都表示10秒內的數據變化,從這份數據可以看出每10秒系統大約會出現500次Key_reads訪問,折合到每1秒就是50次左右,至于這個數值到底合理與否,就由服務器的磁盤能力而定了。(注:我這里之所以數據變化較大,是因為有update等語句造成了表鎖而導致下個時間段內的查詢數猛增。)

為啥數據按10秒取樣,而不是直接按1秒取樣?由于時間段過小,數據變化比較劇烈,不容易直觀估計大小,所以通常數據按照10秒或者60秒之類的時間段來取樣是更好的。

除些之外,我們還可以參考下key_blocks_*參數:

mysql> show global status like 'key_blocks_u%';+------------------------+-------------+| Variable_name | Value |+------------------------+-------------+| Key_blocks_unused | || Key_blocks_used | |+------------------------+-------------+ 

Key_blocks_unused表示未使用的緩存簇(blocks)數,Key_blocks_used表示曾經用到的最大的blocks數,比如這臺服務器,所有的緩存都用到了,要么增加key_buffer_size,要么就是過渡索引了,把緩存占滿了。比較理想的設置:

Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80% 

筆者注:

查看簇(文件系統塊,block)的大小(字節數)

Centos中有以下幾種方法:

#tune2fs /dev/sda1 | grep "block size"
#dumpe2fs /dev/sda1 | grep "block size"

理論上文件系統塊是扇區的倍數

mysqladmin是MySQL一個重要的客戶端,最常見的是使用它來關閉數據庫,除此,該命令還可以了解MySQL運行狀態、進程信息、進程殺死等。本文介紹一下如何使用mysqladmin extended-status(因為沒有"歧義",所以可以使用ext代替)了解MySQL的運行狀態。

1. 使用-r/-i參數

使用mysqladmin extended-status命令可以獲得所有MySQL性能指標,即show global status的輸出,不過,因為多數這些指標都是累計值,如果想了解當前的狀態,則需要進行一次差值計算,這就是mysqladmin extended-status的一個額外功能,非常實用。默認的,使用extended-status,看到也是累計值,但是,加上參數-r(--relative),就可以看到各個指標的差值,配合參數-i(--sleep)就可以指定刷新的頻率,那么就有如下命令:

mysqladmin -uroot -r -i -pxxx extended-status+------------------------------------------+----------------------+| Variable_name | Value |+------------------------------------------+----------------------+| Aborted_clients | || Com_select | || Com_insert | |......| Threads_created | |+------------------------------------------+----------------------+ 

2. 配合grep使用

配合grep使用,我們就有:

mysqladmin -uroot -r -i -pxxx extended-status /grep "Questions/|Queries/|Innodb_rows/|Com_select /|Com_insert /|Com_update /|Com_delete "| Com_delete | || Com_delete_multi | || Com_insert | || Com_select | || Com_update | || Innodb_rows_deleted | || Innodb_rows_inserted | || Innodb_rows_read | || Innodb_rows_updated | || Queries | || Questions | 2721 | 

 

當然,還可以配合awk等,筆者在這里就不一一介紹了,有情趣的朋友可以參考一下其它文檔。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昌乐县| 兴文县| 筠连县| 洱源县| 兴海县| 海兴县| 宜川县| 夏津县| 彰化县| 惠州市| 四川省| 尼木县| 宝应县| 南澳县| 开远市| 盘锦市| 乡城县| 珲春市| 商南县| 伊川县| 南丹县| 福州市| 屏南县| 孟连| 鹤山市| 张家口市| 周至县| 桑植县| 腾冲县| 额尔古纳市| 伊宁市| 永济市| 通渭县| 沭阳县| 松阳县| 峡江县| 延津县| 西和县| 曲水县| 阿图什市| 合肥市|