前言
這個系列屬於個人學習網易雲課堂MySQL數據庫工程師微專業的相關課程過程中的筆記,本篇爲其“MySQL業務優化與設計”中的MySQL數據類型相關筆記。
所有筆記可能不定期更新,發佈時不一定爲最終版。
正文
性能容量評估
分析線上業務場景
評估數據庫服務器所需性能指標
預估可能成爲瓶頸的服務器資源
幫助數據庫性能調優
數據庫服務器硬件性能指標
磁盤IO性能
內存容量
CPU
網絡吞吐量
磁盤容量
數據庫業務特點關鍵詞
OLTP/OLAP類型
併發請求
讀寫比例
數據量
冷熱數據比
數據分級存儲
OLTP與OLAP
T = Transaction
面向廣大用戶,高併發,較短事務操作
互聯網應用絕大部分屬於OLTP
OLTP看重服務器CPU,內存,些事務較多或內存不夠則依賴磁盤IO
A =Analytical
通常面向內部人員,大規模複雜查詢
OLAP看重磁盤掃描的IO能力,部分依賴內存排序。
併發請求-衡量線上業務繁忙程度
業務高峯時數據庫的每秒併發訪問量是多少
通過應用服務器數量,連接池配置判斷
通過產品估算初上線用戶規模和用戶增長速度
通過實際業務業務類型判斷
併發量相關資源:CPU
讀寫比例-描述應用程序如何使用數據庫
線上業務select只讀與update/delete/insert寫操作比例
delete/update通常都是先讀再寫
insert需要分區數據寫入是持續insert還是大量導入數據
根據業務實際場景分析
多數場景相關資源:內存
多寫場景相關資源:磁盤IO
數據量-總量
數據庫服務器存儲設備可擴容能力上限
根據估算的業務量,寫入模式,分析數據增長量
預估一個硬件升級週期內數據庫可存放數據的總量,上線時要留好餘量
數據總量相關資源:磁盤容量
冷數據與熱數據-有用數據的實時集合
熱數據,線上最新一定週期內將被反覆訪問的數據
冷數據,線上保存着的,最近不會被在線用戶用到的數據
估算活躍用戶量,數據增長量等預估熱數據量
內存大小盡可足夠存放線上實時熱數據。
熱數據相關資源:內存
MySQL性能測試
爲什麼需要做性能測試
對線上產品缺乏心裏預估
重現線上異常
規劃未來的業務增長
測試不同硬件軟件配置
性能測試的分類
設備層的測試
業務層的測試
數據庫層的測試
設備層的測試
關注那些性能
服務器、磁盤性能
磁盤壞塊率
服務器壽命
業務層的測試
真的業務進行測試
數據庫層的測試
什麼情況下要做MySQL的測試
測試不同的MySQL分支版本
測試不同的MySQL版本
測試不同的Mysql參數搭配
MySQL測試分類
CPU Bound
全內存的測試,測試的數據遠小於配置的內存;這樣就可以不用因爲磁盤IO的性能不同,而影響測試結果。
IO Bound
測試的數據量遠大於內存,這就有大量的數據從磁盤IO讀取寫入;
遠大於內存
每個均包含:
寫入測試
更新測試
純讀測試
混合模式
以上三種都有。
常用的測試工具
開源的MySQL性能測試工具
sysbench
tpcc-mysql
mysqlslap
性能測試衡量指標
服務吞吐量(TPS,QPS)
TPS:每秒鐘執行的事務量
QPS:每秒鐘執行的請求量
若一個事務中包含10個請求,每秒鐘可執行10個事務
則,TPS爲10,QPS爲10*10=100
服務響應時間
服務併發性
Sysbench
業界較爲出名的性能測試工具
可以測試磁盤、CPU、數據庫
支持多種數據庫:Oracle、DB2、MySQL
需要自己下載編譯安裝
建議版本Sysbench0.5
編譯Sysbench
1)下載sysbench
git clone https://github.com/akopytov/sysbench.git
2)編譯&安裝
./autogen.sh
./configure --prefix=/home/ddb/tmp/sysbench
make && make install
3)./sysbench --help
4)初始化數據
sysbench --test=parallel_prepare.lua --oltp_tables_count=1 --rand-init=on --oltp-table-size=500000000 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sys --mysql-password=netease --mysql-db=sbtest --max-requests=0 prepare
5)運行測試
sysbench --test=oltp.lua --oltp_tables_count=1 --num-threads=100 --oltp-table-size=500000000 --oltp-read-only=off --report-interval=10 --rand-type=uniform --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sys --mysql-password=netease --mysql-db=sbtest --max-time=1000 --max-requests=0 run
6)數據清理
sysbench --test=parallel_prepare.lua --oltp_tables_count=1 --rand-init=on --oltp-table-size=500000000 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sys --mysql-password=netease --mysql-db=sbtest --max-requests=0 cleanup
Sysbench流程
初始化數據-》運行測試-》清理數據
Prepare語法--初始化數據
sysbench --test=parallel_prepare.lua --oltp_tables_count=1 --rand-init=on --oltp-table-size=500000000 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sys --mysql-password=netease --mysql-db=sbtest --max-requests=0 prepare
--oltp-table-size 多少行記錄
Run語法-運行測試
sysbench --test=oltp.lua --oltp_tables_count=1 --num-threads=100 --oltp-table-size=500000000 --oltp-read-only=off --report-interval=10 --rand-type=uniform --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sys --mysql-password=netease --mysql-db=sbtest --max-time=1000 --max-requests=0 run
cleanup
1、手動drop掉表和datebase
2、使用syschench提供的cleanup命令
sysbench --test=parallel_prepare.lua --oltp_tables_count=1 --rand-init=on --oltp-table-size=500000000 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=sys --mysql-password=netease --mysql-db=sbtest --max-requests=0 cleanup
Tpcc-mysql
TPC-C是專門針對練級交易處理系統(OLTP系統)的規範
Tpcc-mysql由percona根據規範實現