web-dev-qa-db-ja.com

多くのmysql一時テーブルを同時に作成するのは悪いことですか?

一部のデータをユーザーに提供するために、重い統計分析を行う必要があります。現在、私はmysqlからのデータをキャッチし、PHP配列を介してそれらを処理しています。ただし、mysqlの一時テーブルは非常に優れています(PHP配列よりもはるかに効率的で高速です。明らかにそのメカニズムにより))。

私の暫定的な解決策は、データをインポートして処理するための各リクエスト(つまり、接続)時に一時テーブルを形成することです。しかし、多くの一時テーブルを同時に作成することの欠点があるかどうかはわかりませんか?

これはmysqlサーバーに問題を引き起こす可能性がありますか?または、PHP配列の代わりに多数の同時リクエストで使用できますか?

8
Googlebot

一時テーブルをできる限り作成したくない場合: 一時テーブルへのコピーを禁止(sql)

MySQLレプリケーションではうまく機能しません: MySQL一時テーブルのバイナリログはどのように更新されますか?

一時テーブルはDBの世界では現実のものであるため、その存在に対応するために、通常とは異なる変更を行う必要がある場合があります。

通常、mysqldはtmpテーブルを/tmpまたは tmpdir が構成されている場所に配置する癖があります。これは通常、疑いを持たない一部のディスクで発生します。

興味深い代替策は、RAMディスクをセットアップし、それを使用するように tmpdir を再構成することです。

ステップ01:RAMディスクのマウントポイントを作成する

mkdir /var/tmpfs

ステップ02:RAMディスクを/ etc/fstab(16GB)に追加します

echo "none   /var/tmpfs              tmpfs   defaults,size=16g        1 2" >> /etc/fstab

ステップ03:この行を/etc/my.cnfに追加します

[mysqld]
tmpdir=/var/tmpfs

ステップ04:RAM Diskを有効にする

次のいずれかを実行できます。

  1. DBサーバーを再起動するだけです
  2. mount -t tmpfs -o size=16g none /var/tmpfs

これを行う前に、十分なRAMがあることを確認してください

試してみる !!!

6
RolandoMySQLDBA

「多くのmysql一時テーブル」-潜在的な問題:

  • table_open_cache(およびその他の調整可能パラメータ)-制限に達する可能性があります(そうなる可能性は低い)
  • Ramの肥大化-Ramをさらに使用することができます(ただし、そうする可能性は低いです)。これがスワッピングにつながる場合、それは本当に悪いことです。

あなたが本当に一度に何百もの一時テーブルを持っていない限り、私は「多く」を心配しません。

一度にいくつのスレッド(SHOW PROCESSLIST; 'Sleep'を無視する)が実行されていますか?忙しいシステムであっても、一度に10を超えることはめったにありません。

implicit一時テーブルの場合、それらを引き起こしているSELECTを見てみましょう。一時テーブルを回避するためにクエリを再設計することが可能な場合があります。

私はram-diskの使用が好きではありません-それはRAMを他のキャッシングの可能性から遠ざけ、ハードリミット(ディスクサイズ)に達するリスクを伴います。

4
Rick James