欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

數(shù)據(jù)庫Mysql性能優(yōu)化詳解

 更新時間:2016年05月27日 14:03:16   作者:我的小草魚  
這篇文章主要介紹了數(shù)據(jù)庫Mysql性能優(yōu)化的相關資料,需要的朋友可以參考下

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

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

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

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

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

key_cache_miss_rate = Key_reads / Key_read_requests * 100% 

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

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

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

2、計數(shù)器并沒有考慮時間因素

雖說Key_read_requests大比小好,但是對于系統(tǒng)調(diào)優(yōu)而言,更有意義的應該是單位時間內(nèi)的Key_reads,即:

Key_reads / Uptime

具體查看方法如下:

[root@web mysql]# mysqladmin ext -uroot -p -ri | grep Key_reads
Enter 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。

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

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

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

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

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

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

筆者注:

查看簇(文件系統(tǒng)塊,block)的大小(字節(jié)數(shù))

Centos中有以下幾種方法:

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

理論上文件系統(tǒng)塊是扇區(qū)的倍數(shù)

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

1. 使用-r/-i參數(shù)

使用mysqladmin extended-status命令可以獲得所有MySQL性能指標,即show global status的輸出,不過,因為多數(shù)這些指標都是累計值,如果想了解當前的狀態(tài),則需要進行一次差值計算,這就是mysqladmin extended-status的一個額外功能,非常實用。默認的,使用extended-status,看到也是累計值,但是,加上參數(shù)-r(--relative),就可以看到各個指標的差值,配合參數(shù)-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的備份與恢復

    詳解mysql的備份與恢復

    這篇文章主要介紹了mysql的備份與恢復的相關資料,幫助大家更好的理解和學習mysql,感興趣的朋友可以了解下
    2020-08-08
  • MySQL中REPLACE INTO和INSERT INTO的區(qū)別分析

    MySQL中REPLACE INTO和INSERT INTO的區(qū)別分析

    REPLACE的運行與INSERT很相似。只有一點例外,假如表中的一個舊記錄與一個用于PRIMARY KEY或一個UNIQUE索引的新記錄具有相同的值,則在新記錄被插入之前,舊記錄被刪除。
    2011-07-07
  • 介紹使用WordPress時10個常用的MySQL查詢

    介紹使用WordPress時10個常用的MySQL查詢

    這篇文章主要介紹了介紹使用WordPress時10個常用的MySQL查詢,許多用戶在使用WordPress時選擇使用MySQL,本文的整理對于剛剛上手的用戶來說非常有用,需要的朋友可以參考下
    2015-04-04
  • Mysql5.7及以上版本 ONLY_FULL_GROUP_BY報錯的解決方法

    Mysql5.7及以上版本 ONLY_FULL_GROUP_BY報錯的解決方法

    這篇文章主要介紹了Mysql5.7及以上版本 ONLY_FULL_GROUP_BY報錯的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • MySQL中觸發(fā)器的基礎學習教程

    MySQL中觸發(fā)器的基礎學習教程

    這篇文章主要介紹了MySQL中觸發(fā)器的基礎學習教程,包括對觸發(fā)器的創(chuàng)建和管理等基本知識,著力推薦!需要的朋友可以參考下
    2015-12-12
  • 提升MYSQL查詢效率的10個SQL語句優(yōu)化技巧

    提升MYSQL查詢效率的10個SQL語句優(yōu)化技巧

    MySQL數(shù)據(jù)庫執(zhí)行效率對程序的執(zhí)行速度有很大的影響,有效的處理優(yōu)化數(shù)據(jù)庫是非常有用的。尤其是大量數(shù)據(jù)需要處理的時候
    2018-03-03
  • mysql千萬級數(shù)據(jù)分頁查詢性能優(yōu)化

    mysql千萬級數(shù)據(jù)分頁查詢性能優(yōu)化

    本文給大家分享的是作者在使用mysql進行千萬級數(shù)據(jù)量分頁查詢的時候進行性能優(yōu)化的方法,非常不錯的一篇文章,對我們學習mysql性能優(yōu)化非常有幫助
    2017-11-11
  • 詳解MySQL8.0原子DDL語法

    詳解MySQL8.0原子DDL語法

    這篇文章主要介紹了詳解MySQL8.0原子DDL語法的相關資料,幫助大家更好的理解和學習使用MySQL,感興趣的朋友可以了解下
    2021-03-03
  • 詳解Mysql 游標的用法及其作用

    詳解Mysql 游標的用法及其作用

    這篇文章主要介紹了Mysql 游標的相關資料,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-09-09
  • mysql5.6 解析JSON字符串方式(支持復雜的嵌套格式)

    mysql5.6 解析JSON字符串方式(支持復雜的嵌套格式)

    這篇文章主要介紹了mysql5.6 解析JSON字符串方式(支持復雜的嵌套格式),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論