2011-12-06 16 views
0

私は2つのサーバが両方ともMySQLインスタンスを実行しています。最初のserver1はMySQL 5.0.22を実行しています。もう一方のserver2はMySQL 5.1.58を実行しています。2台のサーバ、2台のメモリテーブル、異なるサイズ

にメモリテーブルを作成して行を追加すると、そのサイズは即座に8,190.0 KiBになります。

server2にメモリテーブルを作成して行を追加すると、そのサイズはまだsome bytesになります。

これはMySQLバージョンの違いによるものですか(うまくいけば)これは私が変更できるいくつかの設定のためですか?

編集:私は、まだこの行動の理由を発見していないが、私は回避策を見つけました

。今後の参考資料として、これは私のために修正されたものです:

私のすべてのメモリテーブルは一度作られ、そこから読み取り専用です。 MySQLにテーブルの最大行数を指定すると、そのサイズは縮小されます。次のクエリはそれを行います。

ALTER TABLE table_name MAX_ROWS = N 
+0

あなたがテーブル構造を提供することができます - :ここ

は、私はちょうど行っているテストはありますか? – wisefish

+0

例id(smallint)と呼ばれる列が1つしかない場合でも問題があります –

+0

サーバーのアーキテクチャーは同じですか?私は32/64ビットを意味します – jap1968

答えて

0

係数2?

OK、問題はおそらくlatin1の
対UTF-8によって引き起こされる: - http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

あなたは、データベース接続、両方のサーバーに設定されたデータベースのデフォルトの文字を確認することができます。

 
mysql> create table test (name varchar(10)) engine 
    -> =memory; 
Query OK, 0 rows affected (0.03 sec) 

mysql> show create table test; 
+-------+------------------------------------------------------------------------------------------------+ 
| Table | Create Table                     | 
+-------+------------------------------------------------------------------------------------------------+ 
| test | CREATE TABLE `test` (
    `name` varchar(10) DEFAULT NULL 
) ENGINE=MEMORY DEFAULT CHARSET=latin1 | 
+-------+------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> insert into test values (1); 

mysql> set names utf8; 
Query OK, 0 rows affected (0.01 sec) 


mysql> create table test2 (name varchar(10)) engine =memory default charset = utf8; 
Query OK, 0 rows affected (0.01 sec) 

Query OK, 0 rows affected (0.01 sec) 

mysql> insert into test2 values (convert(1 using utf8)); 
Query OK, 1 row affected (0.01 sec) 

mysql> select table_name, avg_row_length from information_schema.tables where TABLE_NAME in('test2', 'test'); 
+------------+----------------+ 
| table_name | avg_row_length | 
+------------+----------------+ 
| test  |    12 | 
| test2  |    32 | 
+------------+----------------+ 
2 rows in set (0.01 sec) 
+0

ファクタ2は、次の図に示すように、異なるアーキテクチャーを使用することによって発生する可能性のあるサイズの差です。 SUM_OVER_ALL_BTREE_KEYS(max_length_of_key + sizeof(char *)×4) + SUM_OVER_ALL_HASH_KEYS(sizeof(char *)×2) + ALIGN(length_of_row + 1、sizeof(char *)) char *は32ビットシステムでは4、64ビットシステムでは8です。しかし、私の場合のサイズの違いははるかに大きいです。さらに、mysqlがメモリテーブル用に多くのメモリを予約しているためです。 MAX_ROWSを低い値に設定すると、データは同じままになりますが、サイズは縮小します。 あなたの努力に感謝します。 –

関連する問題