Mysql

MySQL:查看每個特定表的讀/寫比例

  • September 10, 2018

我正在優化 MySQL 伺服器的配置,只執行 Bromine。這不是特定於應用程序的,只是為了完整性而註明。我正在嘗試確定從 MyISAM 切換到 InnoDB 是否是一個更好的選擇,在少數寫主導表上。這些表佔用了伺服器的大部分寫入,但也是所有查詢的最高百分比。我不想讓所有的表都變成 InnoDB,即使這次它會節省我的時間。我更喜歡 MyISAM。InnoDB 有自己的優勢,這對於這些編寫繁重的特定表來說是有意義的。

我知道如何查看 MySQL 實例的讀/寫統計資訊,並執行所有推薦的分析腳本。我很想知道,如何查看特定表上的讀/寫統計資訊?

如果有相關經驗的人有任何推薦的統計數據可供查看。我會很感激您的意見。

更新:我在 Bromine 論壇上發布了這個問題,他們讓我知道哪些表寫得很重。這並沒有真正回答這個問題,因為無論如何我都想知道。

只是為了完整起見,這是我的表/引擎

Name                               Engine
QRTZ_BLOB_TRIGGERS                 MyISAM
QRTZ_CALENDARS                     MyISAM
QRTZ_CRON_TRIGGERS                 MyISAM
QRTZ_FIRED_TRIGGERS                MyISAM
QRTZ_JOB_DETAILS                   MyISAM
QRTZ_JOB_LISTENERS                 MyISAM
QRTZ_LOCKS                         MyISAM
QRTZ_PAUSED_TRIGGER_GRPS           MyISAM
QRTZ_SCHEDULER_STATE               MyISAM
QRTZ_SIMPLE_TRIGGERS               MyISAM
QRTZ_TRIGGERS                      MyISAM
QRTZ_TRIGGER_LISTENERS             MyISAM
activities                         InnoDB
browsers                           MyISAM
browsers_nodes                     MyISAM
combinations                       MyISAM
combinations_requirements          MyISAM
commands                           InnoDB
configs                            MyISAM
echelons                           InnoDB
groups                             MyISAM
jobs                               InnoDB
myacos                             MyISAM
myaros                             MyISAM
myaros_myacos                      MyISAM
nodes                              MyISAM
operatingsystems                   MyISAM
plugins                            MyISAM
projects                           MyISAM
projects_reports                   MyISAM
projects_users                     MyISAM
reports                            MyISAM
requirements                       MyISAM
requirements_testcases             MyISAM
seleniumservers                    InnoDB
sites                              MyISAM
suites                             InnoDB
testcases                          MyISAM
testcasesteps                      MyISAM
tests                              InnoDB
types                              MyISAM
users                              MyISAM

我通過外掛獲得了統計cacti數據mysqlstats

如果有人通過命令行使用某種腳本執行此操作,我將不勝感激。

您無法一次查看這些表並確定哪些表是寫入繁重的,如果數據庫已經啟動並執行了相當長的時間,則尤其如此。由於使用模式的變化,似乎已收到大量寫入的表可能不再收到任何寫入。

您需要在時間 t 拍攝所有表的快照,然後在時間 t+1 拍攝另一個快照(間隔可能是一小時、一天,或者更可能是一周,可能是一個月)。擁有它們後,您可以測量兩者之間的差異並從中計算活動。

您想查看表讀取與表寫入的比率。比率為 1 表示從不寫入表,只讀取表。比率為 0 表示表只被寫入,從不被讀取。大多數桌子當然會介於兩者之間。

SELECT t.table_name, s.rows_read/ (s.rows_read * 1.0 + s.rows_changed) as read_ratio, s.rows_read, s.rows_changed
FROM information_schema.tables t
LEFT JOIN information_schema.table_statistics s USING (table_schema, table_name)
ORDER BY 2, 3, 4, 1;

全域變數userstat必須設置on為記錄這些統計表中的活動。

將上述查詢放在一個文件中,然後可以從命令行執行:

mysql -BNe < tablestats.sql

引用自:https://serverfault.com/questions/316887