日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

高性能MySQL(二)

發布時間:2023/12/10 数据库 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高性能MySQL(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL基準測試

為什么需要benchmark

  • 驗證基于系統的假設,確認是否符合實際情況
  • 重現系統中的某些異常行為,以解決它們
  • 測試系統當前的運行情況,如果不清楚當前性能,就無法確認優化效果
  • 模擬比當前系統更高的負載,用于找出可能遇到的拓展性瓶頸
  • 規劃業務增長,評估項目在未來負載下需要什么樣的硬件、多大容量的網絡及其他資源
  • 測試應用適應可變環境的能力,如系統在隨機的并發峰值下的性能表現
  • 測試不同硬件、軟件和操作系統配置
  • 證明新采購的設備是否配置正確
  • 策略

    一是針對整個系統的整體測試,另外是單獨測試MySQL,也稱為集成式和單組件式基準測試

    測試什么指標

  • 吞吐量:單位時間內事務處理數,常用單位每秒事務數TPS、每分鐘事務數TPM
  • 響應時間或延遲:任務所需整體時間,單位可以是分鐘、秒、毫秒、微秒
  • 并發性:任意時間有多少同時發生的并發請求,一個Web站點可以同時有5w個用戶訪問,但可能只有20個并發請求到數據庫,因此要關注正在工作的并發操作,檢查數據庫的Treads_running狀態值
  • 可拓展性:給系統增加一倍的資源,就能獲得總共兩倍的吞吐量
  • 方法

    常見錯誤:

  • 使用真實數據的子集而不是全集
  • 使用錯誤的數據分布
  • 使用不真實的分布參數
  • 在多用戶場景中只做單用戶的測試
  • 在單服務器上測試分布式應用
  • 與真實用戶行為不匹配
  • 反復執行同一個查詢
  • 沒有檢查錯誤
  • 忽視系統預熱過程
  • 使用默認的服務器配置
  • 測試時間太短
  • 設計和規劃基準測試

    提出問題并明確目標,決定是標準測試還是專用測試

    對連接使用獨立線程重現,多次測試,詳細記錄

    基準測試運行時間

    應該運行足夠長時間

    獲取系統性能和狀態

    記錄系統狀態、性能指標、CPU使用率、磁盤IO、網絡流量統計等

    #! /bin/shINTERVAL=5 PREFIX=$INTERVAL-sec-status RUNFILE=/home/benchmarks/running mysql -e 'SHOW GLOBAL VARIABLES' >> mysql-variables while test -e $RUNFILE; dofile=$(date +%F_%I)sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")sleep $sleepts="$(date +"TS %s.%N %F %T")"loadavg="$(uptime)"echo "$ts $loadavg" >> $PREFIX-${file}-statusmysql -e 'SHOW GLOBAL VARIABLES' >> $PREFIX-${file}-status &echo "$ts $loadavg" >> $PREFIX-${file}-innodbstatusmysql -e 'SHOW ENGINE INNODB STATUS\G' >> $PREFIX-${file}-innodbstatus &echo "$ts $loadavg" >> $PREFIX-${file}-processlistmysql -e 'SHOW FULL PROCESSLIST\G' >> $PREFIX-${file}-processlist & echo $ts done echo Exiting because $RUNFILE does not exist.
  • 每5秒執行一次收集的動作
  • 每個文件名包含該輪測試開始的日期和小時
  • 每次抓取數據都會記錄當前時間戳
  • 不會處理或過濾數據,保留元數據
  • 如果需要在測試完成后腳本自動退出,只需刪除/home/benchmarks/running文件即可
  • 獲得準確的測試結果

    外部影響很多,盡可能降低這種影響,同時修改參數也盡量一點一點修改

    運行基準測試并分析結果

    自動化腳本測試是比較好的方式,結果最好用圖表的格式繪制出來,這樣可以直觀看到很多光看數據無法被發現的問題

    基準測試工具

    集成式測試工具

    ab

    針對Web應用服務,結果轉換成每秒能滿足多少請求,只能針對單個URL進行盡可能快的壓力測試

    http_load

    與ab類似,也被設計為對Web服務器進行測試,比ab更加靈活,通過一個輸入文件提供多個URL,在這些URL中隨機測試

    JMeter

    Java應用程序,可以加載其它應用并測試其性能,雖然設計用來測試Web應用,但也可用于測試FTP服務器,或JDBC數據庫查詢測試,比ab和http_load復雜得多,擁有繪圖接口

    單組件式測試工具

    mysqlsalp

    可模擬服務器的負載并輸出即時信息

    MySQL benchmark suite(sql-bench)

    單線程的,主要用于測試服務器執行查詢的速度,結果顯示哪種類型的操作在服務器上執行得更快,包含了大量預定義的測試,也可用于高層次測試,缺點是單用戶模式,數據集很小且無法使用指定的數據,無法測試多CPU能力,還需要Perl和BDB的支持

    Super Smack

    用于MySQL和PostgreSQL的肌醇測試工具,可提供壓力測試和負載生成,可模擬多用戶訪問,可加載測試數據到數據庫,支持使用隨機數據填充測試表

    sysbench

    多線程系統壓測工具,可用來測試文件IO、操作系統調度器、內存分配和傳輸速度、POSIX線程以及數據庫服務器,支持Lua腳本語言

    MySQL內置的BENCHMARK()函數

    測試某些特定操作的執行速度,參數是需要執行的次數和表達式,返回值永遠是0,但可通過返回時間判斷執行的時間,不適合用來做真正的測試

    案例

    http_load

    http_load -parallel 1 -seconds 10 [filename] # 單用戶 http_load -parallel 5 -seconds 10 [filename] # 5個并發用戶 http_load -rate 5 -seconds 10 [filename] # 每秒5次請求

    sysbench

    CPU基準測試

    sysbench --test=cpu --cpu-max-prime=20000 run

    文件IO基準測試

    # 準備階段 sysbench --test=fileio --file-total-size=150G prepare # 運行階段 sysbench --test=fileio --file-total-size=150G --file-test-mode=[seqwr/seqrewr/seqrd/rndrd/rndwr/rdnrw] \ --init-rng=on --max-time=300 --max-requests=0 run # 清楚測試文件 sysbench --test=fileio --file-total-size=150G cleanup

    OLTP基準測試

    # 生成百萬行記錄的表 sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test/ --mysql-user=root prepare # 測試(8個并發線程,只讀模式,測試60秒) sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root \ --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run

    其他特性

    內存連續讀寫/線程調度器/互斥鎖/順序寫性能

    轉載于:https://www.cnblogs.com/ikct2017/p/9530315.html

    總結

    以上是生活随笔為你收集整理的高性能MySQL(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。