1. 程式人生 > >pt-ioprofile分析檢視mysql的真實IO情況

pt-ioprofile分析檢視mysql的真實IO情況

針對IO密集型應用做系統調優的時候,我們通常都需要知道系統cpu  記憶體  io 網路等系統性能 和 使用率,結合應用本身的訪問量,以及 mysql的效能指標來綜合分析。比如說:我們將系統壓力情況分為三個階段:從使用者端開始到web server,再到mysql。

1. 客戶量:我們可以從web app的訪問log,檢視訪問量(通常會記錄時間),

2. 系統指標: 對比dstat、 iostat/ mpstat pidstat 等蒐集對應的系統性能指標,

3. mysql: 使用mysql status ,或者 mycheckpoint等工具蒐集mysql的cache , query等資料。

但是問題來了,我們很容易蒐集到了系統層、裝置層的IO資料,但是缺少一個體貼的工具來告訴你應用打開了多少檔案,檔案讀寫比例,執行了多少次fsync,是隨機讀寫還是順序讀寫,另外,mysql是一個龐大而精心設計的系統,使用了一些列的方案如table cache, thread cache 等來提升IO,我們比較容易獲得他的快取量,命中率,檔案數,但是卻不好直觀的知道它到底對物理IO裝置讀寫了多少資料。

ioprofile就是這樣一個工具,提供了直觀的量化的資料來描述程序對io裝置的真實讀寫量。

由於實現方式是使用strace注入到執行緒中,所以執行時需要sudo,方法如下:

sudo ./pt-ioprofile -p 8534 -c count 

sudo ./pt-ioprofile -p 8534 -c sizes 

2015年 04月 23日 星期四 17:55:35 CST
Tracing process ID 8534
     total       read     pwrite      fsync       open      close filename
    613878     613878          0          0          0          0 /redmine/mysql/data/mycheckpoint/sv_diff.frm
    406924     406924          0
0 0 0 /redmine/mysql/data/mycheckpoint/sv_sample.frm 18432 0 18432 0 0 0 /redmine/mysql/data/ib_logfile1 3029 3029 0 0 0 0 /redmine/mysql/data/mycheckpoint/custom_query_view.frm

sudo ./pt-ioprofile -p 8534 -c times

2015年 04月 23日 星期四 17:54:09 CST
Tracing process ID 8534
     total     pwrite      fsync filename
  0.100162   0.000271   0.099891 /redmine/mysql/data/ibdata1
  0.003826   0.000000   0.003826 /redmine/mysql/data/ib_logfile0

sudo ./pt-ioprofile -p 8534 -c sizes -g filename

以上資料輸出中的 read write  fread fwrite  fsync 等指標分別是指什麼呢? 多大的量才算正常?

read/write/fsync:

1. linux底層操作;

2. 核心呼叫, 涉及到程序上下文的切換,即使用者態到核心態的轉換,這是個比較消耗效能的操作。

fread/fwrite/fflush:

1. c語言標準規定的io流操作,建立在read/write/fsync之上
2. 在使用者層, 又增加了一層緩衝機制,用於減少核心呼叫次數,但是增加了一次記憶體拷貝。

關係參看下圖:

1. 對於輸入裝置,呼叫fsync/fflush將清空相應的緩衝區,其內資料將被丟棄;

2. 對於輸出裝置或磁碟檔案,fflush只能保證資料到達核心緩衝區,並不能保證資料到達物理裝置, 因此應該在呼叫fflush後,呼叫fsync(fileno(stream)),確保資料存入磁碟。

參考:

1. http://blog.yufeng.info/archives/995

2. http://blog.csdn.net/ybxuwei/article/details/22727565

相關推薦

pt-ioprofile分析檢視mysql真實IO情況

針對IO密集型應用做系統調優的時候,我們通常都需要知道系統cpu  記憶體  io 網路等系統性能 和 使用率,結合應用本身的訪問量,以及 mysql的效能指標來綜合分析。比如說:我們將系統壓力情況分為三個階段:從使用者端開始到web server,再到mysql。 1. 客戶量:我們可以從web app的

MySQL伺服器 IO 100%的案例分析

【問題】 有臺MySQL 5.6.21的資料庫例項以寫入為主,IO %util接近100%   寫入IOPS很高   【分析過程】 1、通過iotop工具可以看到當前IO消耗最高的mysql執行緒   2、檢視執行緒49342的堆疊,可以看到正在進行redo lo

系統技術非業餘研究 » ioprofile調查應用IO情況的利器

我們在做IO密集型的應用程式的時候,比如MySQL資料庫,通常系統的表現取決於workload的型別。 比如我們要調優,我們就必須非常清楚的知道資料的訪問規律,收集到足夠的資料,用來做調優的依據。 有很多工具可以收集系統層面的,裝置層面的,程序層面的IO資料,但是沒有一個現成的工具可以回答我們比如

在宿主機檢視docker使用cpu、記憶體、網路、io情況

使用命令 docker stats [OPTIONS] [CONTAINER...] docker stats命令返回一個用於執行容器的實時資料流。要將資料限制到一個或多個特定的容器,可以指定一個由空格分隔的容器名稱或ID的列表。您也可以指定一個已停

linux下檢視系統io情況

方式一    vmstat 1    顯示格式如下   procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r  b   swpd   free   buff 

檢視mysql資料庫空間使用情況

如果想知道mysql 資料庫中的每個表佔用的空間、表記錄的行數的話,可以開啟mysql的information_schema資料庫。在該庫中有一個tables表,這個表主要欄位分別是:table_schema:資料庫名table_name:表名engine:所使用的儲存引擎

巧用pt-ioprofile 工具

巧用pt-ioprofile 工具一、描述 生產系統數據庫性能壓力比較大,cpu iowait 40%~50% ,數據庫系統登錄難。需要查出來是什麽進程導致的,最好是找到是什麽文件引起的。二、操作過程1.因為是數據庫系統,很容易知道是mysqld引起的,使用glances系統工具。2. pt-iopr

pt-ioprofile

pt-ioprofilept-ioprofile是屬於percona-toolkit中的一個工具,用strace和lsof來查監視進程的IO情況並打印表文件和活動IO,默認監視mysqld進程30秒警告和風險:pt-ioprofile可能會凍結服務,crash進程,是進程變得更糟糕,或者使進程休眠。pt-io

如何分析賬戶數據異常情況,從而提高轉化

應用 後臺 只需要 .com 開戶 get 進行 如果 技術 百度競價開戶前面翺翔競價軟件的小編講解過數據異常的情況如何進行解決的分析方法。主要的方式就是通過軟件來進行調整的,而用軟件就不要求你有多少的技術,只要你有一定的思維方式就行了。那麽如果從技術上分析,如何進行呢?下

基於pt-table-checksum和pt-table-sync實現MySQL主從數據一致性校驗

MySQL 一致性校驗 在基於MySQL邏輯復制原理的下的主從架構,經常會由於某些緣故產生主從數據不一致,從而導致主從復制進程報錯中斷。而基於定期去檢查從庫的show slave status\G的IO線程和SQL線程的狀態,只能確認當前replication是正常的,卻無法確認當前主從數據是否一致。

檢視MySQL資料庫日誌

檢視mysql資料庫日誌可以檢視對資料庫的操作記錄。 mysql日誌檔案預設沒有產生,需要做如下配置: 開啟mysql的配置檔案 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 修改配置檔案的第68、69行,將#去掉,儲存退出 66 # Be

檢視MySQL日誌資料binlog檔案

binlog介紹 binlog,即二進位制日誌,它記錄了資料庫上的所有改變. 改變資料庫的SQL語句執行結束時,將在binlog的末尾寫入一條記錄,同時通知語句解析器,語句執行完畢. binlog格式 基於語句,無法保證所有語句都在從庫執行成功,比如update ... lim

使用mysqladmin --help檢視mysql是從哪兒載入配置檔案的

[email protected]:~# mysqladmin --help mysqladmin Ver 8.42 Distrib 5.7.21, for Linux on x86_64 Copyright (c) 2000, 2018, Oracle and/or its a

Linux 檢視伺服器端開啟情況及開啟或關閉一個埠(永開啟久關閉)

Linux 檢視伺服器端開啟情況及開啟或關閉一個埠(永久關閉等) 1.Linux CentOS7防火牆的基本操作,對firewalld-cmd操作和檢視 2.Linux CentOS7怎麼開啟外網訪問一個埠 1.Linux

檢視mysql的安裝路徑,配製mysql的環境變數。

1.利用navicat軟體 環境:windows+mysql+navicat   方法:進入mysql命令列輸入:show variables like "%char%"; 結果如下: 2.配製環境變數: (1)新建MYSQL_HOME變數,並將值設定為D:\phpStudy\phpstudy\

檢視MYSQL資料庫的佔用空間

如果想知道mysql 資料庫中的每個表佔用的空間、表記錄的行數的話,可以開啟mysql的information_schema資料庫。在該庫中有一個tables表,這個表主要欄位分別是: table_schema:資料庫名 table_name:表名 engine:所使用的儲存引擎

Linux中檢視磁碟空間使用情況命令df與du的區別

1、兩者區別  du,disk usage of each file,是通過搜尋檔案來計算每個檔案的大小然後累加,du能看到的檔案只是一些當前存在的,沒有被刪除的。他計算的大小就是當前他認為存在的所有檔案大小的累加和。 df,disk free,通過檔案系統來快速獲取空間大小的資訊,當我們

oracle v$sqlare 分析SQL語句使用資源情況

V$SQLAREA 本檢視持續跟蹤所有shared pool中的共享cursor,在shared pool中的每一條SQL語句都對應一列。本檢視在分析SQL語句資源使用方面非常重要。 V$SQLAREA中的資訊列 HASH_VALUE:SQL語句的Hash值。 ADDRESS:S

在windows下檢視mysql的儲存引擎

(1)首先同時按住win鍵和r鍵,輸入cmd,然後點選確定進入到dos命令列 (2)進入dos命令列後進入到mysql命令列模式,預設是在C盤下,剛好我的mysql資料庫也安裝在c盤下,  1> 因此找到你本機安裝mysql資料庫的目錄,直接到mysql目錄下的bin資

dos下進入mysql檢視mysql版本號

(關閉或啟動mysql服務net start mysql 回車即可啟動;關閉輸入net stop mysql 回車)   先進入mysql 的bin目錄下 輸入: mysql -hlocalhost -u資料庫使用者名稱 -p密碼     (u是資