ウィキペディアのデータベースをインポートします。 Wikipedia Dumpsなぜステートメントの時間コストの範囲が大きいのですか?
私はいくつかのInnoDBの設定を変更した:
innodb_buffer_pool_size = 4G
innodb_log_file_size=8G
innodb_log_buffer_size=512M
innodb_write_io_threads = 16
innodb_flush_log_at_trx_commit = 0
max_allowed_packet=256M
この絵は、すべて単一のSQL文の時間コストすることを示しています。
次のようなsql文は次のようになります。templatelinks
に値を挿入(...)、(...)、(...)、... ... ... 1つのSQL文のサイズはすべて1MBです。
なぜ1300番目から1400番目のSQLには時間がかかりますか?
詳細情報:この期間中
- 、このテーブルのサイズは、ほぼ9ギガバイトで、テーブル行40millionです。
- SQLステートメントを実行するのにSpring JdbcTemplateを使用します
- マイコンピュータのメモリは8Gで、データベースはHDDに格納されています。
コアコード:
JdbcTemplate jdbcTemplate=new JdbcTemplate(mDatasour);
while (it.hasNext()){
jdbcTemplate.getDataSource().getConnection().setAutoCommit(false);
jdbcTemplate.execute("SET UNIQUE_CHECKS=0; ");
jdbcTemplate.execute("SET FOREIGN_KEY_CHECKS=0; ");
String line=it.nextLine();
if(line==null||line.length()==0){
continue;
}
jdbcTemplate.execute(line);
jdbcTemplate.execute("commit;");
テーブルのインデックスを作成していますか? – Muhammad
おそらくあなたのサーバーは何か他のもので忙しくなっていますか?大量の挿入が行われているため、パフォーマンスのボトルネックがディスクの可能性が高いため、サーバー上のバックグラウンドプロセスがディスクを使用し始めた場合(ウイルススキャンなど)、ディスクアームが現在しようとしているため、同時に2つの場所で。 – Andreas
@ムハンマド、私はより多くの情報を追加しました。 –