2016-10-07 3 views
0

TEXT型の列を持つテーブルが多数あります。いくつかのテーブルは大きく、サービスは高負荷です。 InnoDB内のすべてのテーブル。メモリVS MyIsam tmpfs?

TEXT型のフィールドがある場合、SQLクエリでtmpテーブルが作成されると、そのテーブルはMyISAM型のディスク上に作成されます。ディスクI/O操作を避けるため、MySQLの一時ディレクトリ(tmpdir)はメモリ(tmpfs)にマウントされています。

1)高速MyISAM tmpfsまたはメモリは何ですか?大きな違いはありますか?

2)MyISAMを一時テーブルに使用する場合MyISAMテーブルのみに必要なバッファを設定する必要がありますか?read_buffer_size read_rnd_buffer_size?これらのMyISAM設定はパフォーマンスにまったく影響しますか? (Myisam_sort_buffe_size、key_buffer_size)

TEXTをVARCHARに変更したいとします。

答えて

0

一般的に、すべての問題を無視することをお勧めします。

  • SELECTTEXT列、それ必見利用のMyISAM、MEMORYないが含まれている場合。つまり、TEXTBLOB、または「大きい」VAR*列に触れないと、多くの場合、はMyISAMを使用する必要はありません。
  • クエリを見てみましょう。多分私たちはtmpテーブルを避けることができます!
  • MyISAMのtmpテーブルは、実際にはさまざまなキャッシングの問題に基づいて(ほぼ完全に)RAMにとどまります。
  • tmpテーブルの場合、MEMORYはほとんど常にMyISAMより高速です。
  • ramdiskを使用していて、tmpテーブルが大きすぎると、クエリがクラッシュします。
  • RAMディスクを使用している場合は、他のもの(特にInnoDBのbuffer_pool)からRAMを奪っているため、他のすべての処理速度が遅くなります。
  • TEXTからVARCHARに変更すると、255を超えるが必要な場合(またはそれが512ありますか?私は、正確なカットオフを持っていません。)動作しません
  • あなたが言及した設定のどれもが、この使用に関連していません場合。
+0

そして、この質問のほとんどはMySQL 8.0ではなくなりました。 TempテーブルはInnoDBになり、いくつかの点で最適化されます。 5.7では '可能'です。 'internal_tmp_disk_storage_engine'を参照してください。 –

+0

すべてのテーブルにはMyIsamのディスクにTextカラムと50%tmpテーブルが作成されています。私たちにはたくさんのRAMがあり、tmpテーブルを作成するのにtmpfsを使うことができます。これはディスク上のtmpテーブルより高速です。 MySQL 5.6があります。 TmpfsはRAMの仮想領域です。 MyISAMがtmpfsやメモリにどのように高速にマウントされているか知りたいですか? tmpテーブルを使用して生産的な作業を行うMyIsamを設定する必要がありますか? – paurlift

+0

代わりに、私は 'TEXT'を回避するか、少なくとも複雑なクエリで' TEXT'カラムを取得することを避けます。そして、複雑なクエリを改善して、tmpテーブルを必要としないようにしようと思います。私たちにいくつかの一般的な質問を表示してもよろしいですか? –

関連する問題