プログラミング何かしらのアクションの度に発生するログデータをMysqlで運用する機会があります。保存期間を決めておかないといずれ、ディスク容量がいっぱいになりDBの書き込みができなくなってしまいます。保存期間を決めたとしても、不必要なデータのみをDelete文で削除していく方法は、時間がかかり非常に面倒です。Mysqlの機能であるパーティションニングを使用すると、設定したルールに従って、データを参照したり、区分化されたデータを一瞬で(物理的に)削除することが可能です。パーティションニングはログ系テーブルには必須の機能と言えます。この記事では、最初に時間がない人のためにパーティションの作り方、中盤以降はパーティションニングについての解説していきます。解説するパーティショニングのタイプは、ログ系テーブルでよく使われるRANGEを使います。まとめ時間がない人のためにパーティションの作り方だけ知りたい方はここだけでも読め!パーティションの作り方だけ解説します。TABLEでテーブルを作成します。PARTITIONを使ってパーティションを区切ります。以下の例は、t_diary_logsテーブルに年単位(createdカラム)でパーティションを区切る例です。ここでのポイントは、プライマリをidとcreatedを設定しています。その理由は、パーティションで区切る基準になるカラムはプライマリに含める必要があるからです。以下の操作でパーティションを区切ることができます。パーティショニングとはMysqlのマニュアルをみるとパーティショニングについて以下のように書いてあります。標準では、データ保存の物理的な仕様に関するガイダンスはあまり提供されていません。言語自体が、それが動作するスキーマ、テーブル、行、またはカラムの基盤となるデータ構造やメディアと独立して動作するように意図されています。それにもかかわらず、ほとんどの高度なデータベース管理システムでは、ファイルシステム、ハードウェア、またはその両方について、特定のデータを格納するために使用される物理的な場所を判別する方法が開発されてきました。(これを行う方法については、セクション8.11.3.1「シンボリックリンクの使用」を参照してください)。パーティショニングはこの認識をさらに一歩進めて、必要に応じて多くの部分を設定できるルールに従って、個々のテーブルの部分をファイルシステムに配分できるようにしています。それにより、テーブルの異なる部分が別個のテーブルとして別個の場所に格納されます。法、範囲セットまたは値リストに対する単純な照合、内部ハッシュ関数、または線形ハッシュ関数が使用されます。関数は、ユーザーが指定したパーティショニングタイプに従って選択され、ユーザーが指定した式の値をパラメータとして取ります。以上のカラム値のセットを指定できます。パーティショニングの概要https://dev.mysql.com/doc/refman/5.6/ja/partitioning-overview.htmlパーティションニングは、1つのテーブルに対して更に、保存領域を設定できます。パーティションニングを適用すると、設定したルールに従って、データを参照したり、区分化されたデータを一瞬で(物理的に)削除することが可能です。パーティションが使えるかどうか確認するMysqlのバージョンによっては、パーティションニングが使えない場合があります。本当にパーティションニングが使えるか以下のSQLを打って、プラグインの中に「partition」があり、「ACTIVE」になっていることを確認します。InnoDBテーブルスペースをテーブル単位で作成できるようになっているかの確認。「my.cnf」を開き、「innodb_file_per_table」が設定されているか確認します。パーティショニングタイプについてパーティショニングのタイプには、RANGE、LIST、COLUMNS、HASH、KEYがありますが、この記事ではログ系テーブルでよく使われるRANGEタイプで解説しています。パーティショニングタイプについて詳しく知りたい方は以下が参考になります。パーティションを作るでは、実際にパーティションを考慮したテーブルを作ります。TABLEでテーブル文をかいて、その後にPARTITIONでパーティションを区分けします。パーティションは、作成後に追加は可能ですが、追加の際、データの再配置を実行するため待ち時間が発生します。運用しているシステムだとメンテンナンス中に行わなければならず、意外に面倒です。よって、初期の段階で、あとで変更が無いようにどのようなパーティションにするのか検討しておく必要があります。以下の例は、t_diary_logsテーブルに年単位(createdカラム)でパーティションを区切る例です。ここでのポイントは、プライマリをidとcreatedを設定しています。その理由は、パーティションで区切る基準になるカラムはプライマリに含める必要があるからです。以下の操作でパーティションを区切ることができます。この操作によって、p0パーティションには、2014以前に発生したデータp1パーティションには、2015以前(2014年のデータ)に発生したデータp2パーティションには、2016以前(2015年のデータ)に発生したデータp3パーティションには、2017以前(2016年のデータ)に発生したデータpmaxパーティションには、2017年以降のデータに発生したデータとそれぞれ格納されるようになります。パーティションの確認Select文で以下のようにパーティションを選択すれば、該当するパーティションのデータのみ参照することができます。最初に作ったパーティションに対してさらに追加したいことがあります。このような場合は、REORGANIZEを使ってパーティションを追加します。以下の例は、新たにパーティションp4を追加して2018年以前(2017年のデータ)を区分けできるようにしたものです。再配置はt_diary_logsテーブルのデータを置き換えるので、時間がかかります。システムを運用していたら、メンテナンスをかけるなどして一度止める必要があります。パーティション管理https://dev.mysql.com/doc/refman/5.6/ja/partitioning-management.htmlパーティションを消してみるパーティションを消すときは、以下のようなSQLを実行します。以下の例は、パーティションp1を物理的に削除する例です。p1その結果、p1パーティションの内容だけが物理的に削除されます。実行速度は0.1秒もかからないほどの一瞬です。上記は、実際の物理データです。パーティション削除すると、p1テーブルのデータが消えます。パーティションを消さず、パーティションのデータを空にする方法もあります。以下の例は、パーティションp2のデータを空にします。p2実際にp2のデータ量が209Mから115kbになっていることを確認できます。まとめいかがでしょうか?ログ系テーブルのように常にデータが溜まるテーブルに対しては、パーティションを設定することによりデータの管理が楽になります。データの管理で悩んでいたらパーティションを使ってみてはいかがでしょうか?スポンサーリンクスポンサースポンサーシェアするツイートフォローするhikage0521関連記事Unity・Android端末から使用メモリ・搭載メモリ(RAM)・MemoryLowを確認・検出できる方法を解説するよUnityからAndroidネィティブ側(Java)を呼び出して、Android端末のメモリ情報を取得する方法を解説します。サンプルソースあり!記事を読むUnityでゲーム開発|パフォーマンスチューニングのためのCPU・メモリ最適化のメモUnityを使ってIOS/Androidアプリを開発している。その際、パフォーマンスのチューニング(主にCPU,メモリ)をする必要が出てきました。今回の記事は、ゲーム開発のチューニングする際に参考になったものを記載します。記事を読む5分で解説!Unityでメモリ管理・残り続けるTextureなどのデータを解放する方法Textureも含めたリソースデータもメモリから解放したい場合は、シーンごとを削除することです。困ったことにTextureなどの一部のリソースデータは、どのゲームオブジェクトから参照されていなくても解放されていなかったのです。Textureは、Unity側でキャッシュしているためです。Studio3系でUnity用のAndroidプラグインを作成するUnityでAndroidアプリを作るとき、Android端末のOSバーションを取得するなど、Android特有の処理をさせたい時があります。Studioを使うなどしてAndroid用のプラグインを作る必要があります。・Tenso...記事を読むPHPにてRedisに限界までデータを登録したあと、データ追加したときの挙動を確認してみたRedisに限界までメモリーにデータを保存したあと、新たにデータを追加したらどうなるか知りたくなったので確認してみた。その結果、(有効期限の設定がない場合)データを追加できなくなりました。この記事では、データの追加ができなくなることを検証した方法を解説します。記事を読むUnityにてiPhoneX対応・NGUIのUIAnchorにSafeAreaの補正処理を入れてみたとりあえず、NGUIのUIAnchorについてSafeAreas対応ができたのでメモ。実行環境がiPhoneXと判定したら、スクリーンとセーフエリアの高さの差分を計算して、差分だけゲームオブジェクト(UIAnchorがアタッチされていること)を下げます。記事を読む不具合発生!あたりまえだが、ユーザーのアクセスが多いときはアップデートするな!なにかしらのイベントをやっていたら、アプリのアップデートは避けるべき。不具合が起きたとき、ユーザーからのクレームの嵐になります。ElastiCacheが簡単なのでオススメといえます。いうわけで、Web上でできる親指シフトの練習ソフトを作ってみた。コメントをキャンセルメールアドレスが公開されることはありません。雑記blogコースアウト.。