7

残念ながら未使用のテーブルがたくさんあるデータベースを使用しており、それをクリーンアップしようとしています。特定のテーブルが使用されなくなったことを 100% 確信できる方法を見つけようとしています。

いくつかのグーグルの後、私はまだそうする良い方法を見つけることができません. 次を使用して、テーブルへの最後の書き込み (INSERT、UPDATE など) のみを伝えることができます。

SHOW TABLE STATUS またはls -ltmysql datadir で実行中 (SHOW VARIABLES LIKE 'datadir'; を実行することで確認できます)

他に提案はありますか?

ありがとう。

4

5 に答える 5

2

を使ってみてくださいINFORMATION_SCHEMA.TABLES。というコラムがありますUPDATE_TIME。そのフィールドの日付を確認します。である場合 NULL、テーブルは作成されてから一度も更新されていません。

例: 過去 10 日間に更新されていないテーブルのリスト

SELECT table_schema, table_name, create_time, update_time
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema', 'mysql')
  AND engine IS NOT NULL
  AND ((update_time < (now() - INTERVAL 10 DAY)) OR update_time IS NULL);

試してみる !!!

于 2010-10-29T21:21:13.523 に答える
1

これは古い質問であることは承知していますが、適切な答えがないようで、私自身の答えの検索によってここに導かれました。未使用のテーブルとインデックスに関する Mark Leith のブログ投稿によると、次のようなことができるはずです。

SELECT
    t.*
FROM performance_schema.table_io_waits_summary_by_table t
WHERE
    t.COUNT_STAR = 0
    AND t.OBJECT_SCHEMA = '<your-schema-name-goes-here>'
    AND t.OBJECT_TYPE = 'TABLE';

詳細については、MySQLのトピックに関する公式ドキュメントを参照してください。

もちろん、パフォーマンススキーマを有効にしており、統計がしばらくクリア/切り捨てられていないことが必要です。

于 2016-03-30T10:22:44.333 に答える
0

http://forums.mysql.com/read.php?20,298759,299185#msg-299185を試してください

「一般ログ」をオンにして (プログラムで) スキャンすると、ログがオンになっている間に誰がどのテーブルにヒットしているかがわかります。注意: そのファイルは急速に大きくなります。

于 2010-10-25T13:24:22.703 に答える