問題タブ [bulkinsert]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - SQLServer db に大量のデータをコピーする方法
現在のデータベースの「スナップショット」を取得し、新しい主キーを使用して同じデータベースに複製する必要があります。
問題のスキーマは約 10 個のテーブルで構成されていますが、一部のテーブルには、複製が必要な数十万から 100 万のレコードが含まれる可能性があります。
ここでのオプションは何ですか?
残念ながら、SPROC を作成するには、操作の全期間にわたって問題のデータベース行を (同時実行のために) ロックする必要があり、これは他のユーザーにとって非常に迷惑です。sqlserver が許可する最大限の範囲で最適化できると仮定すると、そのような操作にはどれくらいの時間がかかりますか? これだけ挿入するのに 30 秒から 1 分かかりますか? 同じテーブルを個別に使用している他のアカウントの下に他のユーザーがいるため、テーブル全体をロックして一括挿入を行うことができません。
期待されるパフォーマンスに応じて、現在のデータベースを xml ファイルにダンプし、バックグラウンドで暇なときにこの xml ファイルからデータベースを非同期的に複製することもできます。これの明らかな利点は、db が xml ダンプの実行にかかる時間だけロックされ、挿入をバックグラウンドで実行できることです。
優れた DBA が「複製」操作を最初から最後まで 10 秒以内に実行できる場合、xmldump/webservice ソリューションの複雑さに見合う価値はないでしょう。しかし、それが失われた原因であり、数百万行を挿入する可能性があり、時間内に膨れ上がる可能性がある場合は、xml アプローチからすぐに開始したいと思います。
それとも、完全に優れたアプローチがあるのでしょうか??
あなたが提供できる洞察に感謝します。
mysql - データ ストリームを処理するための MySQL 挿入の最適化
高速データ ストリームを消費しており、次の手順を実行して MySQL データベースにデータを保存しています。新着アイテムごとに。
- (1) 着信アイテムを解析します。
- (2) 「INSERT ... ON DUPLICATE KEY UPDATE」を数回実行する
INSERT ... ON DUPLICATE KEY UPDATEを使用して、データベースへの追加のラウンドトリップを 1 回排除しました。
全体的なパフォーマンスを改善しようとしている間、次の方法で一括更新を行うことを検討しました。
- (1) 着信アイテムを解析します。
- (2) "INSERT ... ON DUPLICATE KEY UPDATE" で SQL ステートメントを生成し、ファイルに追加します。
ファイル内の SQL ステートメントを定期的にデータベースにフラッシュします。
2 つの質問:
- (1) これはデータベースの負荷に良い影響を与えますか?
- (2)完全なフラッシュ後にのみインデックスが再構築されるように、ステートメントをデータベースにフラッシュするにはどうすればよいですか? (トランザクションを使用していますか?)
更新: Perl DBI + MySQL MyISAM を使用しています。
コメントをお寄せいただきありがとうございます。
java - InformixからOracleへの一括インポート
Informix SEデータベースからいくつかのテーブルをプルし、Oracle 10gでテーブルを切り捨ててから、それらにInformixデータを入力する必要があります。
一括インポートは機能しますか?データ型は衝突しますか?
毎日スケジュールできる単純なJava実行可能ファイルを使用したいと思います。Javaプログラムは一括インポートを呼び出すことができますか?あなたが提供できる例はありますか?ありがとう。
mysql - 1つのリクエストに挿入できる最適なレコード数またはデータサイズはありますか?
Mysqlマルチ挿入ステートメントの使用(1つのINSERTステートメントに複数のレコードを挿入します)。一度に挿入できるレコード数、またはデータサイズ(バイト)に最適な数はありますか?
sql-server-2008 - SQL Server 2008 での一括コピー (bcp) と一括挿入の違いは何ですか?
一括コピー (bcp) と一括挿入の違いは何ですか?
bcp のデータベース内のすべてのテーブルのすべてのデータをエクスポートするスイッチはありますか?
sql-server-2005 - MS SSISでブロックの一括挿入が更新されるのはなぜですか?
SSISパッケージを次のように設定しています。
SSISフローhttp://www.invativa.se/Images/Support/support.PNG
New Rowsフローのみを実行すると、Bulk Insertは問題なく終了しますが、Live Rowsフローを接続するとすぐに、パッケージが無期限に停止します。アクティビティモニターを確認すると、[新しい行の挿入]タスクによってブロックされた[新しいテーブル行の更新]タスクのストールが発生します。
バルクインサートが終了しないのはなぜですか?パッケージを実行させるにはどうすればよいですか?
NB:これが最適ではないかもしれないことを私はよく知っています、しかし私はそれが述べられているように質問への答えを得ることに本当に興味があります。ありがとう!
sql-server-2005 - SQL Server 2005: 数千または挿入要求のパフォーマンスの向上。ログアウト-ログイン時間 = 120ms
SQL Server 2005 が ADO.NET 2.0 を使用してクライアントによって発行された要求をどのように処理するかについて、誰かが光を当てることができますか? 以下は、SQL トレースの短縮出力です。接続プールが機能していることがわかります (プールされている接続は 1 つだけだと思います)。私には明らかではないのは、以下の for ループの各ループの監査ログイン、SQL:BatchStarting、RPC:Starting、監査ログアウトなど、非常に多くの sp_reset_connection 呼び出しがある理由です。tempdb と master データベースの間で常に切り替えが行われていることがわかります。これにより、次の接続が ConectionString 引数に基づいてプールからフェッチされて作成されたときに、コンテキストが失われたと結論付けることができます。
15 ミリ秒ごとに、1 秒あたり 100 ~ 200 回のログイン/ログアウトを取得できることがわかります (プロファイラーによって同時に報告されています)。15 ミリ秒後、1 秒あたり 100 ~ 200 回のログイン/ログアウトが再び発生します。
これが本番環境での非常に複雑な挿入クエリにどのように影響するかを明確にする必要があります。私は Enterprise Library 2006 を使用しています。コードは VS 2005 でコンパイルされています。これは、親子行をグループ化する 10,000 行のフラット ファイルを解析し、アプリケーション サーバーで実行し、リモート SQL で 2 つのストアド プロシージャを実行するコンソール アプリケーションです。親レコードを挿入する Server 2005 は、Identity 値を取得し、それを使用して 2 番目のストアド プロシージャを 1 回、2 回、または複数回 (場合によっては数千回) 呼び出して、子レコードを挿入します。子テーブルには、5 ~ 10 のインデックスを持つ 1,000 万近くのレコードがあり、その一部は非クラスター化されています。挿入された詳細レコードをアーカイブ テーブルにコピーする非常に複雑な挿入トリガーがあります。全体として、1 秒あたり 7 回の挿入しかありません。つまり、5 万件のレコードに 2 ~ 4 時間かかる可能性があります。
したがって、私の質問は、会社が10万件のレコードをロードし、毎日の計画を立て、フラットファイル注文として来るクライアント要求を満たすためのSLAを持っているため、レコードの挿入を改善する方法があるかどうかです。すぐにインポートされます)。60,000 をインポートするのに 4 時間かかっていたものが、30 分に短縮されます。
DataAdapter の BatchSize を使用して複数のストアド プロシージャ コールを送信したり、SQL Bulk insert を使用して DataReader または DataTable から複数の挿入をバッチ処理したり、SSIS 高速ロードを使用したりしようと考えていました。しかし、インデックスの再作成と統計の人口を適切に分析する方法がわかりません。おそらく、これが完了するまでに時間がかかる可能性があります。さらに悪いことに、会社はレポートに最大のテーブルを使用し、他のオンライン処理とインデックスを削除できません。フィールドに値を設定してトランザクションを手動で管理し、その値を他のアプリケーションがコミットされた行を取得するために使用している新しい値に変更するトランザクション更新を行います。
この問題にアプローチする方法を教えてください。今のところ、別のデータベースに最小限のログを記録し、インデックスを持たないステージング テーブルを作成しようとしています。バッチ処理された (大規模な) 親子挿入を試みます。Production DB には単純な復旧モデルがあると思いますが、完全な復旧になる可能性があります。.NET コンソール アプリケーションで使用されている DB ユーザーが bulkadmin ロールを持っている場合、その一括挿入のログは最小限に抑えられます。テーブルがクラスター化されていて、挿入する多くの非クラスター化インデックスが行ごとにログに記録されることを理解しています。
接続プーリングは機能していますが、多くのログイン/ログアウトがあります。なんで?
for (int i = 1; i <= 10000; i++){ using (SqlConnection conn = new SqlConnection("server=(local);database=master;integrated security=sspi;")) {conn.Open(); using (SqlCommand cmd = conn.CreateCommand()){ cmd.CommandText = "tempdb を使用"; cmd.ExecuteNonQuery();}}}
SQL Server プロファイラー トレース:
監査ログイン マスター 2010-01-13 23:18:45.337 1 - 非プール
SQL:BatchStarting use tempdb master 2010-01-13 23:18:45.337
RPC:Starting exec sp_reset_conn tempdb 2010-01-13 23:18:45.337
監査ログアウトtempdb 2010-01-13 23:18:45.337 2 - プールされた
監査ログイン -- ネットワーク プロトコル マスター 2010-01-13 23:18:45.383 2 - プール
された SQL: BatchStarting は tempdb マスターを使用 2010-01-13 23:18:45.383
RPC: exec sp_reset_conn tempdb 2010-01-13 23:18:45.383 の開始
監査ログアウト tempdb 2010-01-13 23:18:45.383 2 - プール済み
監査ログイン -- ネットワーク プロトコル マスター 2010-01-13 23:18:45.383 2 - プール
された SQL:BatchStarting use tempdb master 2010-01-13 23:18:45.383
RPC:Starting exec sp_reset_conn tempdb 2010-01-13 23:18 :45.383
監査ログアウト tempdb 2010-01-13 23:18:45.383 2 - プール
sql-server - SQL Server 2005 一括挿入バイナリ型
次の形式のテーブルがあります。
また、バイナリ データが 16 進データとしてエクスポートされるプロセスの 1 つによってテーブル内のデータから生成された csv ファイルもあります。
動作する INSERT INTO ステートメントを生成しようとしましたが、非常に遅くなりました..
BULK INSERT に飽きましたが、失敗しており、バイナリデータが原因であると思われます。
BULK INSERT (またはそのようなもの) を使用して、バイナリ データを含む大量のデータを挿入する方法を知っている人はいますか?
データの例:
ありがとう。
java - HibernateとMySQLでアップサートを処理するエレガントな方法
私は現在、HibernateとMySQLの上にあるバッチインポート機能に取り組んでいます。私の目標は、いくつかのテーブルにアップサート機能を持たせることです。キーで行が存在するかどうかを確認し、正しいメソッドに分岐するためのコードをたくさん書いていることに気づきました。より良い方法があるのではないかと思っていました。つまり、SQL-Server SSISに付属しているツールに類似していますが、HibernateとMySQL用です。HibernateやMySQLでバルクアップサートを処理するためにどのツールまたはエレガントなソリューションを使用しましたか?
asp.net - 一括挿入・更新を行う
次のようなデータ入力フォームがあります...
データ入力フォーム http://img192.imageshack.us/img192/2478/inputform.jpg
いくつかの空の行があり、それらのいくつかには値があります。ユーザーは既存の値を更新でき、空の行に値を入力することもできます。
これらの値を DB テーブルにマップする必要があり、そのうちのいくつかは新しい行としてデータベースに挿入され、既存のレコードが更新されます。
あなたの提案が必要です。このシナリオを最善の方法で達成するにはどうすればよいですか。
ありがとう