15

約2か月前、私はEnWikipediaデータ(http://dumps.wikimedia.org/enwiki/20120211/)をmysqlにインポートしました。

EnWikipediaデータのインポートが完了した後、約2か月間mysqlのEnWikipediaデータベースのテーブルにインデックスを作成しています。

これで、「ページリンク」にインデックスを作成するようになりました。

しかし、そのポイントを通過するのに無限の時間がかかるようです。

そのため、残り時間をチェックして、直感が正しいかどうかを確認しました。

その結果、予想残り時間は60日でした(最初から「ページリンク」にインデックスを作成したと仮定します)。

My EnWikipedia database has 7 tables: 
"categorylinks"(records: 60 mil, size: 23.5 GiB), 
"langlinks"(records: 15 mil, size: 1.5 GiB), 
"page"(records: 26 mil, size 4.9 GiB), 
"pagelinks"(records: 630 mil, size: 56.4 GiB), 
"redirect"(records: 6 mil, size: 327.8 MiB), 
"revision"(records: 26 mil, size: 4.6 GiB) and "text"(records: 26 mil, size: 60.8 GiB).

私のサーバーは...Linuxバージョン2.6.32-5-amd64(Debian 2.6.32-39)、メモリ16GB、2.39GhzIntel4コア

インデックスを作成するための一般的な現象は、非常に長い日数を要しますか?誰かがより迅速にインデックスを作成するための良い解決策を持っていますか?

前もって感謝します !


PS:残り時間を確認するために以下の操作を行いました。

参考文献(申し訳ありませんが、次のページは日本語で書かれています):http ://d.hatena.ne.jp/sh2/20110615

1日 「pagelink」にレコードがあります。

 mysql> select count(*) from pagelinks;
 +-----------+ 
 | count(*)  |
 +-----------+ 
 | 632047759 |
 +-----------+ 
 1 row in set (1 hour 25 min 26.18 sec)

2位。1分あたりのレコード数が増えました。

getHandler_write.sh

 #!/bin/bash

 while true
 do
   cat <<_EOF_
 SHOW GLOBAL STATUS LIKE 'Handler_write';
 _EOF_
   sleep 60
 done | mysql -u root -p -N

指図

$ sh getHandler_write.sh
 Enter password:
 Handler_write   1289808074
 Handler_write   1289814597
 Handler_write   1289822748
 Handler_write   1289829789
 Handler_write   1289836322
 Handler_write   1289844916
 Handler_write   1289852226

3位。録音速度を計算しました。

2.の結果によると、記録速度は

 7233 records/minutes

4日。残り時間は

 (632047759/7233)/60/24 = 60 days
4

1 に答える 1

8

これらはかなり大きなテーブルなので、インデックス作成はかなり遅いと思います。6億3000万レコードは、インデックスを作成するための大量のデータです。注目すべきことの1つは、データセットが非常に大きく、テーブルが正しくパーティション化されていないと、パフォーマンスが低下するパーティション化です。いくつかの便利なリンク を次に示します。遅いインデックスでパーティションを使用して、インデックスを構築するためのバッファサイズ設定を確認することもできます(デフォルトは8MBです。大きなテーブルの場合は、かなり遅くなります。バッファサイズのドキュメント

于 2012-04-12T10:23:27.003 に答える