2012-03-14 28 views
0

私は大きなデータベース(約50GB)を持っています。それは私がほとんど制御することができるサーバー上ですが、私は彼らが夜間にバックアップを行うためにmysqldumpを使用していることを知っています。大きなデータベースでmysqldumpを実行すると長いクエリがハングアップすることがありますか?

私は何時間もの時間がかかります。私はそれを実行するように設定しましたが、実際には終了しません。

バックアップ時間の後、すべてのテーブルにロック要求があります(SHOW OPEN TABLES WHERE in_use> 0;すべてのテーブルがリストされています)。私のクエリから

テーブルはここに何が起こっているのか...他のすべてのテーブルがIN_USE = 1

持っているので、IN_USE = 2を持っていますか? a)マイ・クエリが正常に実行されているため、ダンプの実行がブロックされています。私はちょうど待つべきですか? b)ダンプが原因でサーバがハングしています(おそらくメモリ/ディスクスペースが不足していますか?) c)何か他に何かありますか?

EDIT:使用してMyISAMテーブル

あり非常に有能ではありませんサーバー管理者ですが、私は彼に特定の事柄を尋ねるならば、彼は彼らを行います。彼に何を確認させるべきですか? EDIT

:それはisi_issuesテーブルのすべてのレコードを見て必要とする理由私は実際に理解していない

+----+-------------+-------------+------+--------------------------------------------------------------------------+---------------------------------------+---------+-------------------------------+---------+-------------+ 
| id | select_type | table  | type | possible_keys               | key         | key_len | ref       | rows | Extra  | 
+----+-------------+-------------+------+--------------------------------------------------------------------------+---------------------------------------+---------+-------------------------------+---------+-------------+ 
| 1 | SIMPLE  | cited_issue | ALL | NULL                  | NULL         | NULL | NULL       | 1156856 |    | 
| 1 | SIMPLE  | cited  | ref | isi_articles_id_when_cited,isi_articles_issue_id       | isi_articles_issue_id     | 49  | func       |  19 | Using where | 
| 1 | SIMPLE  | r   | ref | isi_citation_references_article_id,isi_citation_references_id_when_cited | isi_citation_references_id_when_cited | 17  | mimir_dev.cited.id_when_cited |  4 | Using where | 
| 1 | SIMPLE  | citing  | ref | isi_lac_authored_articles_article_id          | isi_lac_authored_articles_article_id | 16  | mimir_dev.r.article_id  |  1 |    | 
+----+-------------+-------------+------+--------------------------------------------------------------------------+---------------------------------------+---------+-------------------------------+---------+-------------+ 

:追加クエリ

SELECT citing.article_id as citing, citing.year, r.id_when_cited, cited_issue.country 
FROM isi_lac_authored_articles as citing # 1M records 
     JOIN isi_citation_references r ON (citing.article_id = r.article_id) # 400M records 
     JOIN isi_articles cited ON (cited.id_when_cited = r.id_when_cited) # 25M records 
     JOIN isi_issues cited_issue ON (cited.issue_id = cited_issue.issue_id) # 1M records 

は、この内容を説明されては言っています。 issue_idのisi_articles(引用されたもの)とマッチしてはいけませんか?両方のフィールドが索引付けされます。

+0

ここでは分かりにくい種類ですが、これはサーバーの問題であり、バックアップによってリソースが減少する可能性があるようです。私は、www.infobright.orgのような分析データベースをチェックしますが、それを完了するまでに時間がかかります。 –

+0

サーバの管理者に確認するにはどうすればよいですか?私は彼が分析データベースをインストールするとは思わない... – pocketfullofcheese

+0

MyIsam、InnoDB、を使用しているのは、どのような種類のストレージエンジンが最初に見つかるだろう...バックアップは一般的に実行され、あなたのクエリはその時点でクエリのベンチマークを取得します –

答えて

1

はい - mysqldumpのいくつかのオプションは、バックアップが進行中にすべてのMyISAMテーブルをロックするという効果があり、バックアップは一時点の一貫した「スナップショット」です。

InnoDBはこれを不要にするトランザクションをサポートしています。 MyISAMよりも一般的に高速です。あなたはそれを使うべきです。 :)

+0

しかし、バックアップの前に実行するようにクエリを設定した場合、クエリが終了するまで私のクエリがバックアップをロックアウトするべきではありませんか?それは分析のためのトランザクションデータベースではありません。私はMyISAMがInnoDBよりも一般的に高速であると思っていました。 – pocketfullofcheese

+0

MyISAMは、現在のバージョンのMySQLでは、一般的にInnoDBと同等以上のスピードを示します。 – duskwuff

2

このサイズのMySQLデータベースでは、スレーブノードへのレプリケーションの設定を検討し、夜間データベースのバックアップをスレーブ上で実行することを検討してください。

+0

多くの取引がない場合でもこれをお勧めしますか? – pocketfullofcheese

関連する問題