2

このようなテーブルがあります

CREATE TABLE IF NOT EXISTS `dnddata` (
  `numbers` varchar(10) NOT NULL,
  `opstype` char(1) NOT NULL,
  PRIMARY KEY (`numbers`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
/*!50100 PARTITION BY KEY (numbers)
PARTITIONS 25 */;

3億レコードを挿入する必要があります。load data in filecsvファイルから使用するたびに1000万レコードを挿入しています。

1,000 万件のレコードを挿入するには、最初に 5 分近くかかります。時間が少しずつ増えていきます。3,000 万件のレコードの後、挿入が停止し、メモリを 100% 使用してサーバーが応答しなくなります。

私のmy.cnfファイル設定の下

bulk_insert_buffer_size = 100M
key_buffer = 100M
sort_buffer_size = 50M
read_buffer = 50M

私は2GメモリのCPUを使用しています。

3,000 万件のレコードの詳細

    Space usage
Type    Usage
Data    545.3   MiB
Index   694.8   MiB
Total   1,240.1 MiB

MySQL client version: 5.5.14

インデックスなしで50秒で罰金1000万入れています。

どのような設定を変更すればよいか教えてください。

4

1 に答える 1

2

試す:

ALTER TABLE dnddata DISABLE KEYS;

LOAD DATA INFILE...

ALTER TABLE dnddata ENABLE KEYS;

また、my.cnfを次のように構成します。

key_buffer_size = 1G
sort_buffer_size = 4M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
join_buffer_size = 2M
bulk_insert_buffer_size = 32M
myisam_sort_buffer_size = 256M

MySQL設定ファイルを変更した後、MySQLサーバーを再起動します。

以下の式は、パラメーターを適切に構成するのに役立つ場合があります。

key_buffer_size + (read_buffer_size + sort_buffer_size) * max_connections = K bytes of memory (< 2GB)

本当にvarchar(10)のような数字が必要ですか?char(10)またはintにすると、パフォーマンスが向上します。

varchar列にPRIMARYKEYを作成するのはオーバーヘッドなので、不要な場合は削除できます。

于 2012-07-24T07:13:26.447 に答える