jumper

コラム

MySQL のパーティショニング

2018年04月27日

MySQL のパーティショニングは、使い方次第で劇的な高速化を実現できます。MySQLの欠点ともいえるログデータの扱いも、パーティショニングの考え方、使い方次第で大きく改善できますので、MySQLの管理者やデータベースの設計者は積極的に活用を検討してください。
まずはMySQL のパーティショニングがどのようなものか見てみましょう。

概要

概要

MySQLのパーティショニングは5.1から実装され、MySQLの高速化が見込める機能です。検索に対して対象範囲が制限される点、容量が分割されるために高速処理が実現できます。

利点としては、一定の期間内のデータ取得が高速処理され、またはデータ削除がログデータを残さないで出来るので肥大化を防ぐことが可能です。特にMySQLを運用していくと不要な容量の肥大化に悩まされますので、大変有用な技術といえます。

一方で期間内のデータをまたがる場合は負荷が高くなります。事前に設定されたキーに従って使えば劇的に早いパーティショニングですが、キーを複数使う場合には一気にそれがマイナスに働いてしまいます。

その点では正しい正規化に対する考え方をベースに検討するべき機能です。

パーティショニングタイプ

パーティショニングタイプ

パーティショニングにはいくつかのタイプがあります。

  • RANGEパーティショニング
  • LISTパーティショニング
  • HASHパーティショニング
  • KEYパーティショニング

上記の4つのタイプが主に使われるものです。
では個別に説明していきます。

RANGE

レンジ(範囲)を指定し、パーティショニングします。数値型を利用して定義された範囲に格納されます。例えば1~10の範囲とかです。

LIST

定義済のリストをセットし、その値を振り分けてパーティショニングします。一見、RANGEに似ていますが、定義されたリスト以外は使用できません。例えば、A・B・Cなどのリストです。

HASH

HASHパーティショニングは整数型のカラムでハッシュ値をもとに振り分けられます。データは自動的に均等にパーティショニングされます。

KEY

KEYパーティショニングは主キーまたはユニークキーをMD5関数などでハッシュ化し、パーティショニングされます。

パーティション管理

パーティション管理

では、MySQLではパーティショニングされたテーブルをどのように管理しているのでしょうか。MySQLが管理するテーブル情報にパーティショニングされているか、どのように管理されているかの情報が格納されています。

既存のパーティションを追加、削除、再定義、マージ、または分割するなどの管理は、パーティショニング拡張を利用して実行が可能になっています。また、それらの情報を取得することが可能です。

なお、パーティションの追加は現状の仕様だと、そのパーティションの後続に追加する形になります。そのため、ケースによってはパーティションの再構成が必要となる場合があります。

パーティションの削除はデータも削除されます。この場合の削除は、MySQLのDELETEと違い、DROPと同様の結果が得られます。ログデータも残りませんので、削除後は最適化などする必要がありませんので、不要データによって速度が落ちることもありません。

一つのテーブルに格納されるデータを分割して運用する点ではMyISAMのようにテーブルサイズが限定された仕様でも、パーティショニングすることでクリアできます。適切にテーブル設計と管理を行う点では、パーティショニングを有効に活用することとMySQLの基本思想を熟知することは同等と考えても良いのではないでしょうか。

まとめ

MySQLのパーティショニングは検索速度を上げ、データ管理の上でも利点の大きいものです。上手に活用してデータベースの高速化を図りましょう。ただし、パーティショニングは魔法ではありませんので、テーブルの設計をよく検討した上での利用が肝心です。

CONTACT

製品・サービスに関するご質問、お見積もり、お問い合わせなど、お気軽にご連絡ください。

 050-5505-5509

受付時間 9:30 - 12:00, 13:00 - 17:00
(土日祝および年末年始を除く)