Magentoログテーブルのレコード削除
Magentoはユーザーの行動履歴など全てログテーブルへ記録します。
Google Analyticsを利用している場合や、記録されたデータを活用しない場合は不要です。
管理者画面よりログ取得OFFにすると、ロギングしないらしいのですが、
私の環境では無効化しても動作しなかったためSQLで削除することにしました。
どれがログテーブルにあたるのかは${MAGENT_HOME}/shell/log.php statusで確認できます。
ログテーブル一覧
$ php ${MAGENTO_HOME}/shell/log.php status -----------------------------------+------------+------------+------------+ Table Name | Rows | Data Size | Index Size | -----------------------------------+------------+------------+------------+ log_customer | ****K | ****Mb | ****Mb | log_visitor | ****K | ****Mb | 0 b | log_visitor_info | ****K | ****Mb | 0 b | log_url | *****K | ****Mb | ****Mb | log_url_info | ***** | ****Gb | 0 b | log_quote | 0 | ****Kb | 0 b | report_viewed_product_index | ****M | ****Mb | ****Gb | report_compared_product_index | ****K | ****Mb | ****Mb | report_event | ****K | ****Mb | ****Mb | catalog_compare_item | ****K | ****Kb | ****Mb | -----------------------------------+------------+------------+------------+ Total | ****M | ****Gb | ****Gb | -----------------------------------+------------+------------+------------+
この中でreport_viewed_product_index,repodt_compared_product_indexは
最近チェックした商品などで利用されるため、全て削除してしまうとサイト閲覧中の利用者に影響があります。
ログテーブルのレコード削除(Magentoスクリプトを利用)
${MAGENTO_HOME}/shell/log.php cleanで削除できます。
$ php ${MAGENTO_HOME}/shell/log.php clean
これはforeachで100件ずつ削除しているため非常に遅いです
(削除件数はMage_core_config系に書かれてるっぽい、管理画面で変更可能のはず)
また、削除対象のレコード数が多い場合にこのスクリプトを実行するとMySQLのmax_allowed_packetに関するエラーが出力されてしまいます。
件数が多すぎる場合はDELETE文なりトランクするのが良いと思います。
ログテーブルのレコード削除(手動)
あまりにも件数が多かったためTRUNCATEしたいところでしたが、
不安だったのでDELETEで少しずつ削除しました。
いろんな方面からトランクしたんか!!って詰められたくないし。
mysql> DELETE FROM log_customer ORDER BY log_id LIMIT <行数>; mysql> DELETE FROM log_quote ORDER BY quote_id LIMIT <行数>; mysql> DELETE FROM log_url ORDER BY url_id LIMIT <行数>; mysql> DELETE FROM log_url_info ORDER BY url_id LIMIT <行数>; mysql> DELETE FROM log_visitor_info ORDER BY visitor_id LIMIT <行数>;
スクリプトを利用せずに削除しても問題ないことがわかりました。
サクッと削除したい場合はTRUNCATEしてしまってもよさそうです。
データ削除後はALTER TABLEでinnodbデータファイルをShrinkすることをお忘れなく。
innodb_file_per_table指定してないですって?
ご愁傷さまです。