MySQLで「オーバーヘッド」とはどういう意味ですか、何が悪いのですか、どのように修正するのですか?


157

簡単な質問ですが、それはしばらくの間私を悩ませています...

MySQLの「オーバーヘッド」とは何ですか。心配する必要がありますか?

「テーブルの最適化」をクリックすると実際に修正されますか?

回答:


147

オーバーヘッドは、データベースが一部のクエリを実行するために使用した一時的なディスク領域であると思われるため、これが非常に高くなった場合にのみ心配する必要があります。

「テーブルの最適化」をハードドライブのデフラグと比較できます。

私は引用します:

すべてのデータベースは、時間の経過とともに、最適なパフォーマンスレベルを維持するために何らかの形のメンテナンスを必要とします。削除された行のパージ、再シーケンス、圧縮、インデックスパスの管理、デフラグなどは、mysqlではOPTIMIZATIONと呼ばれ、他のデータベースでは他の用語で呼ばれます。たとえば、IBM DB2 / 400では、REORGANIZE PHYSICAL FILE MEMBERと呼ばれています。

まるで車のオイル交換やチューンナップのようなものです。あなたは本当にそうする必要はないと思うかもしれませんが、そうすることであなたの車はより良く走り、あなたは燃費を良くします、等々。頻繁に使用されるデータベースにも同じことが必要です。多数のUPDATE操作やDELETE操作、あるいはその両方を実行している場合、特にテーブルに可変長の列(VARCHAR、TEXTなど)がある場合は、調整を続ける必要があります。


1
@Jasper最適化の期間中、テーブルは完全にロックされていますか(読み取り/書き込みはできません)?
ペーチェリエ2012

4
その引用はどこから来たのですか?Googleで多くの結果を見つけています。
Ian Hunter

どのようにしてオーバーヘッドが何度も繰り返されるかをどのようにして知ることができますか?
mahen3d 2015

おかしな技術用語に関係なく、完璧で簡単な例をありがとう。
shyammakwana.me 2016

1
「本当に高い」とは何ですか?
TV-C-15

87

phpMyAdmin呼び出すものについて話している場合overhead、それは同じデータファイルの理想的なサイズに対するテーブルデータファイルの実際のサイズです(バックアップから復元されたときのように)。

パフォーマンス上の理由から、MySQL行を削除または更新した後は、データファイルを圧縮しません。

これoverheadはテーブルスキャンには適していません。つまり、クエリですべてのテーブル値を実行する必要がある場合は、より多くの空のスペースを調べる必要があります。

テーブルとインデックスを圧縮するをoverhead実行するOPTIMIZE TABLEことで、を取り除くことができます。


7
mysqlのドキュメントサイズには、「テーブルの大部分を削除した場合、または可変長行を含むテーブルに多くの変更を加えた場合は、OPTIMIZE TABLEを使用する必要がある」とあります。これが私のケースです。おかげで:)
boclodoa

8

オーバーヘッドはテーブルのData_free、つまり割り当てられているが未使用のバイト数です。 SQLコマンドSHOW TABLE STATUSで確認できます。これは、テーブルに割り当てられたサイズの空き領域です。


1

テーブルを最適化すると、非常に問題が発生する可能性があります。たとえば、テーブルがサイトで頻繁に使用されている場合。

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

MyISAMまたはARCHIVEテーブルの大部分を削除した後、または可変長行(VARCHAR、VARBINARY、BLOB、またはTEXT列を持つテーブル)を含むMyISAMまたはARCHIVEテーブルに多くの変更を加えた後。削除された行はリンクリストに保持され、後続のINSERT操作は古い行の位置を再利用します。<

私はこの動作を確認したと思います。そして、それは確かに非常に便利です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.