12 GB .SQLファイルをインポートするのはなぜ36時間以上かかるのですか?

dba.stackexchange https://dba.stackexchange.com/questions/1326

  •  16-10-2019
  •  | 
  •  

質問

12 GB .SQLファイルを簡単にインポートするのを36時間待っていました type site.sql | mysql 指図。私は見ることができます ibdata1 現在、まだ40 GB近く成長しています。

トリガーとストアドプロシージャが.SQLの終わりにあることを考慮すると、MySQLはデータとキーインデックスを追加するだけであると思います。

Site.SQLは、別のサーバーからこのコマンドを使用して生成されました。

mysqldump -R -e --databases site --add-drop-database --add-create-database --add-drop-table -C --single-transaction --triggers

何がそんなに時間がかかっていますか?

役に立ちましたか?

解決

これを試して:

$ ps -ef|grep [m]ysql

次に、プロセスIDを特定します

$ strace -cp <pid>

10秒または1分間そのままにしておきます ^C. 。それは、プロセスがどこに時間を費やしているかをあなたに示します、例えば、あなたが見たなら、それはただディスクを待っているかもしれません readwrite 支配します。

他のヒント

主キーのあるinnodbテーブルはありますか

  1. 複数の列が含まれていますか?
  2. 幅広いvarcharを持っていますか?
  3. そして、多くの非ユニークインデックス?
  4. 幅広いキーを備えた1つまたは複数の非ユニークインデックス?

これらの条件のいずれかは、おそらくインデックス内の大きなbtreeノードを発生させる可能性があり、各btreeノードに葉が非常に少なくなります。プライマリキーのクラスターキーは、クラスタリングされていないキーの各非ユニークキーエントリにも添付されています。

別の考慮事項:INNODBデータページの合計は、INNODBインデックスページよりも大幅に少ないですか?

このクエリ(MB)でそれを見つけることができます:

SELECT SUM(data_length)/POWER(1024,2) InnoDBData,
SUM(index_length)/POWER(1024,2) InnoDBIndexes
FROM information_schema.tables WHERE engine='InnoDB';

追加の考慮事項:ロードしているDBサーバーでバイナリロギングを有効にしていますか?もしそうなら、これをロードしているサーバーでこれを行います:

mysql -h... -u... -p... -A -e"SET sql_log_bin=0; source site.sql"

これが役立つことを願っています!!!

読んでいるテーブルは、トリガーとインデックスと制約がないことを確認していますか?どのハードウェアとOSを実行していますか?ストレージはどのように構成されていますか?

私はOracleに精通していますが、トリガーなしでテーブルに12Gのインポートをすることは、インデックスと制約が200GB/hで簡単に移動する必要があります。 1つのトリガーが、トリガーが何をするかに応じて、カタツムリにプロセスを作成できます...

これが役立つことを願っています

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top