2011-12-22 5 views
3

私はMySQLの大きなテーブルを扱うためのオプションを探しています。私のデータベースには、1億3000万以上の行(70GB以上)が非常に高速であるテーブルはほとんどありません。報告と分析のために、私はいくつかの集約関数を実行しなければならず、クエリはインデックスにもかかわらず非常に遅く実行されます。私はデータを集約してテーブルを作ろうとしましたが、それは最適ではありません。だから私はこの問題を解決するために使用できるツールのオプションを探しています。あなたがまだの場合は、あなたのテーブルをINGのpartitionを調べて非常に大きなMySQLのテーブルとレポート

+0

どのような方法/アプローチデータの統合に使用していますか? – Nonym

+0

いくつかの事前集計クエリを実行してサマリーテーブルを作成しました – user1078191

+0

ハードウェア、ストレージエンジン、クエリ自体、インデックス - すべてがクエリの速度に影響します。 MySQLが何をするかを見るために 'EXPLAIN SELECT'を実行することができます。 70ギガは大量のデータですが、常に最適化することができます(異なるストレージエンジン、正規化、パーティション化) - 分析に必要な情報を投稿していないため、問題を特定し解決策を提案することは難しいNonymの回答などの通常の解決策を除きます。 –

答えて

3

スタート:

http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

http://www.slideshare.net/datacharmer/mysql-partitions-tutorial

http://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html

どのようにあなたのデータを '統合' ですか?使用している方法が最適でない可能性があります。 1つの良いアプローチ(これが実際に何をしているのかを教えてください)は、集計されたデータを含むテーブルを作成することです。そして、このようにそれを設定:

まず

  • は(クーロンのか、何でもあなたが便利か、すでに設定されている場合があります)ジョブを作成します...データがメインテーブルに投棄されているかはさておき置くことデータがメインテーブルにロードされる方法(指定された間隔で実行されます(MAINと呼びましょう)を実行します。 MAINテーブルが毎時ロードされたら、それを同期させます。半時間ごとに?関係ない。とにかく速度を確認することができます。また、ピーク時の近くでレポートが実行されている場合は、近くでスケジュールを設定してください。

  • 統合データのテーブルを適切にインデックスします。それをAGGとしましょう。

  • MAINからAGG(基本的にはAGG LOAD FOR INTERVAL-?)のデータをロードするストアドプロシージャを作成します。もちろん、データがMAINに挿入される方法やタイミングを知っているのはあなただけです。集約の意図が何であるかを知っている人もあなたです。集計の意図が完了していない場合は、集計ストアドプロシージャを継続して実行することもできます(それは1日の合計です)。

  • STAGINGテーブルを使用します。 私にとって、彼らは最高です

  • この手順を実行することにより、更新またはレコードの追加挿入をAGGテーブルに反映できるように、データを再チェックするストアドプロシージャを作成します。範囲を更新するパラメータを含めます。それが毎日の場合は、DAILY AGG LOADDAILY AGG RELOADの手順があります。夜間によく眠るのに役立つAGG CHECK INTERVALAGG CHECK DAILY手順を含めてください。もちろんああして(できれ)AGG DATA HOLE CHECKまたはMISSING AGG DATA CHECKに言及し、集計表から、あるいはメインテーブルまたはステージング表から取得できるデータの必要最小限の量をチェックする実装するビジネスルールを適用しない

  • AGGテーブルを決して変更しないでください。必ず再ロードしてください。

  • これはどのように役立ちますか?あなたのレポートがAGGテーブルを照会する必要はありません。これは、より小さく、より高速です(集約はすでに完了しているので)。おそらくパフォーマンスの問題がインターバルの読み込みに伴ってくるかもしれませんが、テーブルやインデックス、メンテナンスが適切に構成されていれば価値があるはずです。

  • パーティションはどこに入っていますか?アーカイブ。一定の時間が経過すると(あなたのチーム/上司/トップマンに受け入れ可能なことについて話し合う)、古いデータをMAINからアーカイブすることができます。 1年分のデータを運用データベースに保存しなければならないという経験がありました。それはドラッグのような感じでしたが、それはクライアントの要求だったので、私は必要なディスクスペースを私に与えてくれるだけでした。私の経験はMicrosoft SQL Server 2005であり、ストアドプロシージャとSSISは楽しいものでした。

これは既にわかっていない場合や、オプションを検討したいと思う他の人のためのものです。私はあなたがすでに上記のどれかを知らなかったと言っているわけではありません。私はあなたが試みた統合プロセスを持っていることを除いて、私があなたのポストからより多くの情報を持っていなかったことを考慮して、前に何ができるかを述べています。

+0

あなたの提案をありがとう。私はすでにかなりの数を試しましたが、その順序ではないかもしれません。だから私は良い計画から始めなければならない。 – user1078191

+0

ええ、私はそれを言及すべきでした..適切に計画し、予期し、過小評価することはありません(見積もりは、ディスク容量の面で、より良いものです)あなたの要件.. – Nonym

関連する問題