Sysbench安裝與測試
1.安裝:
cd /usr/local/src wget https://codeload.github.com/akopytov/sysbench/tar.gz/1.0.17 tar -xzvf /usr/local/src/sysbench-1.0.17.tar.gz -C /usr/local/ cd /usr/local/sysbench-1.0.17 ##RHEL/CentOS yum -y install make automake libtool pkgconfig libaio-devel # For MySQL support, replace with mysql-devel on RHEL/CentOS 5 yum -y install mariadb-devel openssl-devel # For PostgreSQL support yum -y install postgresql-devel ##Build and Install ./autogen.sh # Add --with-pgsql to build with PostgreSQL support ./configure make -j make install sysbench --version
2.測試:
准備數據:
sysbench /usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua \ --mysql-host=10.10.48.240 \ --mysql-port=3307 \ --mysql-user=root \ --mysql-password=rooT_258 \ --mysql-db=dbtest \ --oltp-tables-count=10 \ --oltp-table-size=10000000 \ --oltp-dist-type=uniform \ --oltp-read-only=off \ --oltp-test-mode=complex \ --rand-init=on \ --db-driver=mysql \ --report-interval=10 \ --threads=1000 \ --time=120 \ prepare
執行測試:
sysbench /usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua \ --mysql-host=10.10.48.240 \ --mysql-port=3307 \ --mysql-user=root \ --mysql-password=rooT_258 \ --mysql-db=dbtest \ --oltp-tables-count=10 \ --oltp-table-size=10000000 \ --oltp-dist-type=uniform \ --oltp-read-only=off \ --oltp-test-mode=complex \ --rand-init=on \ --db-driver=mysql \ --report-interval=10 \ --threads=1000 \ --time=120 \ run >> /home/mysysbench.log
清理數據:
sysbench /usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua \ --mysql-host=10.10.48.240 \ --mysql-port=3307 \ --mysql-user=root \ --mysql-password=rooT_258 \ --mysql-db=dbtest \ --oltp-tables-count=10 \ cleanup
重要說明:
需要說明的選項: mysql-db=dbtest:測試使用的目標數據庫,這個庫名要事先創建 --oltp-tables-count=10:產生表的數量 --oltp-table-size=10000000:每個表產生的記錄行數 --oltp-dist-type=uniform:指定隨機取樣類型,可選值有 uniform(均勻分布), Gaussian(高斯分布), special(空間分布)。默認是special --oltp-read-only=off:表示不止產生只讀SQL,也就是使用oltp.lua時會采用讀寫混合模式。默認 off,如果設置為on,則不會產生update,delete,insert的sql。 --oltp-test-mode=nontrx:執行模式,這里是非事務式的。可選值有simple,complex,nontrx。默認是complex
simple:簡單查詢,SELECT c FROM sbtest WHERE id=N
complex (advanced transactional):事務模式在開始和結束事務之前加上begin和commit, 一個事務里可以有多個語句,如點查詢、范圍查詢、排序查詢、更新、刪除、插入等,並且為了不破壞測試表的數據,該模式下一條記錄刪除后會在同一個事務里添加一條相同的記錄。 nontrx (non-transactional):與simple相似,但是可以進行update/insert等操作,所以如果做連續的對比壓測,你可能需要重新cleanup,prepare。 --oltp-skip-trx=[on|off]:省略begin/commit語句。默認是off --rand-init=on:是否隨機初始化數據,如果不隨機化那么初始好的數據每行內容除了主鍵不同外其他完全相同 --num-threads=12: 並發線程數,可以理解為模擬的客戶端並發連接數 --report-interval=10:表示每10s輸出一次測試進度報告 --max-requests=0:壓力測試產生請求的總數,如果以下面的max-time來記,這個值設為0 --max-time=120:壓力測試的持續時間,這里是2分鍾。 注意,針對不同的選項取值就會有不同的子選項。比如oltp-dist-type=special,就有比如oltp-dist-pct=1、oltp-dist-res=50兩個子選項,代表有50%的查詢落在1%的行(即熱點數據)上,另外50%均勻的(sample uniformly)落在另外99%的記錄行上。 再比如oltp-test-mode=nontrx時, 就可以有oltp-nontrx-mode,可選值有select(默認), update_key, update_nokey, insert, delete,代表非事務式模式下使用的測試sql類型。 以上代表的是一個只讀的例子,可以把num-threads依次遞增(16,36,72,128,256,512),或者調整my.cnf參數,比較效果。另外需要注意的是,大部分mysql中間件對事務的處理,默認都是把sql發到主庫執行,所以只讀測試需要加上oltp-skip-trx=on來跳過測試中的顯式事務。
###############################################################################
查詢表的數據量
SELECT CONCAT(table_schema,'.',table_name) AS 'Table Name', table_rows AS 'Number of Rows', CONCAT(ROUND(data_length/(1024*1024*1024),4),'G') AS 'Data Size', CONCAT(ROUND(index_length/(1024*1024*1024),4),'G') AS 'Index Size', CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),4),'G') AS'Total'FROM information_schema.TABLES WHERE table_schema LIKE 'dbtest';
參考來源:
https://www.cnblogs.com/conanwang/p/5910079.html