開いてるテーブル数で見る PARTITION と MRG_MyISAM のちがい

タイトルを (ry しようかと思ったけどやめた。いちおう。

下でちょっと適当なことを書いてしまったのでもうちょい正確なことを。再起動直後にselectしてshow statusしてみた。

テーブル2つ+マージ1つ

mysql> show status like 'Open%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| Open_files             | 8     | 
| Open_streams           | 0     | 
| Open_table_definitions | 18    | 
| Open_tables            | 4     | 
| Opened_files           | 73    |
| Opened_tables          | 3     |
+------------------------+-------+
6 rows in set (0.00 sec)

パーティション2分割

mysql> show status like 'Open%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| Open_files             | 10    | 
| Open_streams           | 0     | 
| Open_table_definitions | 16    | 
| Open_tables            | 4     | 
| Opened_files           | 68    | 
| Opened_tables          | 1     |
+------------------------+-------+
6 rows in set (0.00 sec)

だから?

MyISAMの場合、開いてるファイルの数はpartitionもmrg_myisamもほとんど同じだけど、テーブル数はpartitionのほうが少なくて済みます。パーティションの数によらず1つとカウントされてる。

なので、open_files_limit に引っかかるのがかどうかレベルではたぶん変わらないです。大量のテーブルをたくさんのパターンでマージしてるような場合は、あいかわらず気をつける必要があるんじゃないかと思います。

一方で table_open_cache (5.0まではtable_cache) は…、どうなるんだろう。希望的観測だとパーティションが有利な気がするんだけど、詳しく調べてません。うーむ。