Mysql

用於負載/性能測試的主活動的多執行緒重放

  • January 9, 2022

有誰知道任何現有的工具/產品可以完成我正在嘗試做的事情?

在搜尋了一下之後,我唯一能找到的就是我想要完成的事情是其他人在尋找同樣的東西http://forums.mysql.com/read.php?24,192250,192250

我的想法是我想擷取到我的主伺服器的所有流量,以便針對監控開始時拍攝的整個數據庫的快照保存重播日誌。Bin 日誌不會滿足我的需求,因為它們只包含寫入。我希望閱讀活動能夠真實地查看提議更改對“真實”生產流量的影響。

真正的生產流量意味著來自所有應用程序的所有內容,這些應用程序正在訪問要修改的數據庫。如果有一些應用程序級別的更改,則僅執行該應用程序的測試不會考慮當時系統中正在進行的其他活動。不能保證在測試環境中執行所有應用程序具有相同的數據庫狀態。當我啟動它們時,我可以將測試快照作為起點,但應用程序無法精確重放它們自己的活動。

我使用來自http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/的 tcpdump 腳本來監控活動,但這並不能告訴我哪些查詢來自哪些連接。我想要的部分回放是一種多執行緒方法,它從實際使用的相同數量的執行緒中回放活動。

我負擔不起打開一般查詢日誌記錄 b/c 我的生產主機將無法處理為此造成的性能損失。

該過程的整個快照部分是擁有一個黃金起點數據庫,以確保在每次測試執行開始期間一切都相同。

我相信 Percona 工具包 ( http://www.percona.com/doc/percona-toolkit/2.0/pt-query-digest.html ) 中的 pt-query-digest 是您正在尋找的。

我實際上有一個建議,需要一些工作,但可行。

理論情景

  • 您有 3 個數據庫:db1、db2、db3
  • 生產數據庫啟用了二進制日誌記錄

您需要以下內容來創建足夠的流量:

  • db1、db2 和 db3 兩週前的生產數據庫 (TwoWeekOldData.sql) 的 mysqldump

  • 生產數據庫上兩週或更長時間的二進制日誌

  • 四個執行 MySQL 的數據庫伺服器

    • DBServers 1-3 是生產數據庫的從屬伺服器
    • DBServers 1-4 已啟用二進制日誌記錄
    • DBServer1 已replicate-do-db=db1載入且僅載入了 db1 數據
    • DBServer2 已replicate-do-db=db2載入且僅載入了 db2 數據
    • DBServer3 已replicate-do-db=db3載入且僅載入了 db3 數據
    • DBServer4 已載入來自 TwoWeekOldData.sql 的所有數據

您將需要以下內容:

  • 對 Slave1 上的所有二進制日誌執行 mysqlbinlog 並將 SQL 收集到 db1traffic.sql

  • 對 Slave2 上的所有二進制日誌執行 mysqlbinlog 並將 SQL 收集到 db2traffic.sql

  • 對 Slave3 上的所有二進制日誌執行 mysqlbinlog 並將 SQL 收集到 db3traffic.sql

  • 像這樣並行執行這三個流量 SQL 文件

    • mysql -hdb4 -u... -p... -A -Ddb1 < db1traffic.sql &
    • mysql -hdb4 -u... -p... -A -Ddb2 < db2traffic.sql &
    • mysql -hdb4 -u... -p... -A -Ddb3 < db3traffic.sql &
  • 可以使用 DBServer4 來衡量

    • 伺服器負載
    • 查詢性能
    • I/O 使用率
    • 無論您想測量什麼

正如我在一開始提到的,這需要一些設置工作以及訪問舊數據和自舊數據上次備份以來的所有二進制日誌條目。

我希望這能給你一些關於產生真實流量而不是模擬普通負載的指導。

試一試!!

引用自:https://dba.stackexchange.com/questions/6391