Mysql
MySQL:查看每個特定表的讀/寫比例
我正在優化 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