一部のデータをユーザーに提供するために、重い統計分析を行う必要があります。現在、私はmysqlからのデータをキャッチし、PHP
配列を介してそれらを処理しています。ただし、mysqlの一時テーブルは非常に優れています(PHP配列よりもはるかに効率的で高速です。明らかにそのメカニズムにより))。
私の暫定的な解決策は、データをインポートして処理するための各リクエスト(つまり、接続)時に一時テーブルを形成することです。しかし、多くの一時テーブルを同時に作成することの欠点があるかどうかはわかりませんか?
これはmysqlサーバーに問題を引き起こす可能性がありますか?または、PHP配列の代わりに多数の同時リクエストで使用できますか?
一時テーブルをできる限り作成したくない場合: 一時テーブルへのコピーを禁止(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を有効にする
次のいずれかを実行できます。
mount -t tmpfs -o size=16g none /var/tmpfs
これを行う前に、十分なRAMがあることを確認してください
試してみる !!!
「多くのmysql一時テーブル」-潜在的な問題:
あなたが本当に一度に何百もの一時テーブルを持っていない限り、私は「多く」を心配しません。
一度にいくつのスレッド(SHOW PROCESSLIST; 'Sleep'を無視する)が実行されていますか?忙しいシステムであっても、一度に10を超えることはめったにありません。
implicit一時テーブルの場合、それらを引き起こしているSELECTを見てみましょう。一時テーブルを回避するためにクエリを再設計することが可能な場合があります。
私はram-diskの使用が好きではありません-それはRAMを他のキャッシングの可能性から遠ざけ、ハードリミット(ディスクサイズ)に達するリスクを伴います。