2017-02-22 9 views
0

私は、永続性のためにMySQLを使用しているテストスイートの高速化中です。 my.cnfdatadirtmpdirを以下のようにRAMDiskを使用するように変更しました。RAMDiskでMySQLを実行

datadir   = /run/shm/mysql 
tmpdir   = /run/shm/mysqltemp 

問題は毎回、私はテストがテストされている機能の一部として、特定の行を削除しようとしたとき、私は外部キー制約違反に遭遇したいくつかの点で、全体のテストスイートを実行することです。私がRAMDiskでMySQLを実行していないときや、datadirをデフォルトの/var/lib/mysql/のままにして、tmpdirだけを変更すると、これが起こらないというのは奇妙なことです。私はRAMでdatadirのテストを実行したいと思います。なぜなら、私がそうすると、クリーンアップロジックが驚異的に速いことに気付いたからです。

誰かが私がここで間違っているかもしれないことを指摘することができますか?

+0

申し訳ありませんが、私はdatadirを残しましたが、tmpdirだけを変更してください。それを修正するために質問を編集します。 – ivanorone

答えて

1

MySQLを実行するのに十分なRAMがあるかどうかを確認してください。また、は推奨していません RAMDISKでMySQLを実行してください。

最適化といえば、 MEMORYタイプのデータストレージを利用する必要があります。もちろんSSDでも実行してください。 HDD/SSDの主な違いはI/O待ち時間であり、そのため多くのサーバーがREDISのようなインメモリ(キャッシュ)DBを利用している理由です。

最適化でそれを見て、幸運を考えてください。

+1

ご協力ありがとうございます。私はRAMDisk上でMySQLを稼働させているわけではありません。これはテストのためだけであり、高速なテストスイートを持つという単なる目標のためです。 MEMORYタイプのデータストレージでは、InnoDbを使用するプロダクションにできるだけ近い設定でテストを実行したいので、実際に使用する必要はありません。 私は既にSSDを使用しています。このスイートでは、私が質問した最適化がなくても11時間以上かかっています。また、tmpdirをRAMDiskに変更すると約3時間です。 – ivanorone

+0

RAMDiskでinnoDBを実行することは問題ありませんが、勧められません。外部キー/インデックスの破損は、MySQLの領域を使い果たしたことによって引き起こされる可能性があります。また、使用しているストレージシステムのバージョンについてもお聞かせください。 –

+0

私はMySQLバージョン5.5.54を使用しています。 RAMディスクには8Gbのメモリがあり、ボックス全体に16Gbのメモリがあり、このボックスはテストスイートのみを実行します。おそらく、このメモリは十分ではありませんが、メモリが不足してもMySQLが不平を言ってはいけませんか? – ivanorone