問題タブ [sqlbulkcopy]

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.

0 投票する
3 に答える
32945 参照

.net - SqlBulkCopyでタイムアウトが期限切れになりました

SqlBulkCopyを使用して、xmlバックアップからテーブルを復元しています。テーブルバックアップの1つは最大200MBの大きさで、多くのレコードがあります。

エラーが発生しています:

0 投票する
2 に答える
1302 参照

c# - csvファイルをSQLサーバーにアップロードする-IDの問題

次のCSVファイルの列構造を指定します。

そして、次の構造を持つSQLServerテーブル

(フィールドIDは、自動インクリメントが1のIDです)

SQL ServerがcsvファイルのFirst_Name列をIDフィールドに挿入しようとしないようにするにはどうすればよいですか?

詳細については、csvをDataTableにロードしてから、SqlBulkCopyを使用してSQLServerにコピーします。

インポートする前にcsvファイルを変更してID列を追加する必要があります(インポート前に宛先テーブルが切り捨てられるため、キー値の重複について心配する必要はありません)。または、データテーブルにID列を追加することはできますか?

または、SQL Serverに見逃した可能性のある設定はありますか?

0 投票する
1 に答える
272 参照

sql-server - あるデータベースから別のデータベースにデータのみをコピーする

これがこの質問のサイトかどうかわかりません [もしそうなら、コメントに入れるか、移動するために投票してください]

SQL Server 2005 上の同じサーバー内で、あるデータベースから別のデータベースにデータのみをコピーするにはどうすればよいですか?

2 つのデータベースのスキーマは同じですが、データは同じではありません。あるデータベースから別のデータベースにデータを取得しようとしています。

[データベースのセキュリティ設定を台無しにする] スナップショットから復元できません。スキーマ データもコピーしようとしているため、データのインポート ウィザードを使用できません。

0 投票する
2 に答える
1538 参照

sql-server - Getting rows inserted with SqlBulkCopy

I am switching some of my Linq to Sql code to use SqlBulkCopy, and problem is I need to do two inserts of multiple thousands of rows into two tables.

The service takes your batch of 10,000 links (imported from sitemap, backlink builders, etc), and chops them into RSS feeds of X per feed for aggregation. Problem is, I already have a table of 32 million rows. If i am doing linq to sql inserts, it takes depending on site traffic anywhere between 5 and 10 mintues to load 10,000 links.

The structure is very basic.

Feeds: Id bigint (PK), Title varchar(1000), Description varchar(1000), Published datetime, Aggregated datetime null, ShortCode varchar(8) [antiquated, not inserted anymore, but used for legacy data]

Items: Id bigint (PK), FeedId bigint (FK), Title varchar(1000), Description varchar(1000), Published datetime, ShortCode varchar(8) [antiquated, not inserted anymore, but used for legacy data], ShortId bigint null [updated after insert to equal Id (used in partitioning)]

FutureItems: Id bigint (PK), FeedId bigint (FK), Title varchar(1000), Description varchar(1000), Published datetime, ShortCode varchar(8) [antiquated, not inserted anymore, but used for legacy data], ShortId bigint null [updated after insert to equal Id (used in partitioning)]

OldItems: Id bigint (PK), FeedId bigint (FK), Title varchar(1000), Description varchar(1000), Published datetime, ShortCode varchar(8) [antiquated, not inserted anymore, but used for legacy data], ShortId bigint null [updated after insert to equal Id (used in partitioning)]

So if you have a feed size of 20, you get 500 inserts into the Feeds table, then 10000 inserted into the Items table, then and update runs to set the ShortId equal to the Id. Once a night, a job runs that separates the data into the other two tables, and shift future items into the Items table.

I read that SqlBulkCopy can do 20 million rows in the matter of mintues, but I can't find any good examples of doing it into multiple tables with a FK Constraint.

Our SQL server is a "monster" especially for this application. It is SQL 2008 R2 Web, Windows 2008 R2 Enterprise, 12GB Ram, Dual 4 core Xeons @ 2.8ghz.

Our web server is a clone without the database service.

The CPU runs about 85% when inserting links, and the database fills the RAM.

If SqlBulkCopy isn't good, any suggestion is welcome, we have paying customers who are getting mad, and I am not a DBA, just a plain-old-programmer.

0 投票する
1 に答える
488 参照

sql-server - 指定された mysql クエリに対する SQL Server の同等のクエリ

テーブル名:サンプル

テーブル構造:

mysql クエリ:

SQL Server の同等のクエリ:

bcpを使用していただければ幸いです..よろしくお願いします..

0 投票する
6 に答える
4486 参照

sql-server-2008 - .NET コードから SQL Server テーブルに挿入する最速の方法は?

これを行うための最速の方法は何ですか:

  • 1 つのテーブル、事前に入力できない参照はありません (つまり、参照キーが 1 つありますが、すべてのデータが入力されています)。
  • たくさんのデータ。APIを介して動的に入力される、1日あたり数億行について話します
  • 要求は、ほぼリアルタイムのシナリオで可能な限り早く処理する必要があります (つまり、1 日 1 回のアップロードのためにファイルに書き出す必要はありません)。2 秒が通常の最大遅延です
  • データ/アプリケーションと SQL Server 用に別のマシン

私が今していること:

  • 最大 32*1024 行を配列に集約してから、キューに入れます。
  • 2 ~ 3 スレッドでキューを読み取ります。SqlBulkCopy を使用してデータベースに挿入します。

1 秒あたり約 60k ~ 75k 行がインポートされますが、これは十分ではありませんが、かなり近い値です。250.000行を達成したいと思っています。

これまでのところ、実際には何も使用されていません。私は 20% の時間「ネットワーク I/O」ブロックを取得し、1 つのコアで 80% の CPU 側をロードしました。ディスクは 7 mb ~ 14 mb を書き込んでおり、ほとんどアイドル状態です。6 raptors の RAID 10 の平均キュー長は.... 0.25 です。

これをスピードアップする方法を知っている人はいますか?より高速なサーバー (これまでのところ、仮想、8 GB RAM、4 コア、データ用の物理ディスク パス スルー)。


いくつかの説明を追加します:

  • これは、2008 R2 サーバー上の 2008 R2 Enterprise SQL Server です。マシンには 4 コア、8 GB RAM があります。すべて64ビット。80% の負荷平均は、約 20% の CPU 負荷を示すこのマシンからのものです。
  • テーブルは単純で、主キーはなく、リレーショナル参照 (計測器参照) のインデックスと一意 (一連の計測器内であるため、これは強制されません) タイムスタンプのみです。
  • テーブルのフィールドは次のとおりです: タイムスタンプ、インストゥルメント リファレンス (強制的な外部キーなし)、データ タイプ (char 1、投稿されたデータを示す文字数の 1 つ)、価格 (double)、ボリューム (int)。ご覧のとおり、これは非常に薄いテーブルです。問題のデータは、金融商品のティック データです。
  • 質問はハードウェアなどについてもです。主に、実際のボトルネックが見られないためです。私は複数のトランザクションに挿入していますが、それは私に利益をもたらしますが、それは小さなものです。ディスク、CPU は大きな負荷を示しておらず、ネットワーク io 待機は高くなっています (300 ミリ秒/秒、現時点では 30%) が、これは 2 つのサーバーで JSUT を実行し、すべてを実行するのに十分なコアを備えた同じ仮想化プラットフォーム上にあります。私は「別のサーバーを購入する」ことにほとんどオープンですが、最初にボトルネックを特定したいと思います....特に、結局のところ、ボトルネックが何であるかを把握していないことを考えると. ロギングは関係ありません。一括挿入はデータとしてデータ ログに記録されません (クラスター化されたインデックスはありません)。

たとえば、バイト (tinyint) によって、たとえば 16 個のテーブルでインストゥルメント ユニバースを分割し、同時に最大 16 個の挿入を行うことで、垂直分割が役立ちますか? 実際には、データはさまざまな取引所から取得されるため、取引所ごとにパーティションを作成できます。これは自然な分割フィールドになります (これは実際には計測器にありますが、ここでこのデータを複製することができます)。


いくつかの明確化: 速度がさらに高速になり (90k)、マシン間のネットワーク IO によって明らかに制限されました。これは VM の切り替えである可能性があります。

私が今していることは、32k行ごとに接続を行い、一時テーブルを作成し、SqlBUlkdCopyでこれに挿入し、次に1つのSQLステートメントを使用してメインテーブルにコピーすることです-メインテーブルのロック時間を最小限に抑えます.

現在、ほとんどの待機時間はネットワーク IO にあります。VMが賢明な問題に遭遇したようです。今後数か月で物理ハードウェアに移行します ;)

0 投票する
3 に答える
8198 参照

c# - SQL一括コピーYYYYMMDDの問題

C# を使用して asp.net 3.5 で SQL Bulkcopy を使用すると、文字列から日付への変換に問題があります。

大きな CSV ファイルを読みました ( CSV リーダーを使用)。読み取った文字列の 1 つを SQL Server 2008 の Date 列にロードする必要があります。

たとえば、テキスト ファイルに文字列 '2010-12-31' が含まれている場合、SQL Bulkcopy は問題なくそれを Date 列に読み込みます。

ただし、文字列が '20101231' の場合、エラーが発生します:
The given value of type String from the data source cannot be convert to type date of the specified target column

ファイルには 8000 万件のレコードが含まれているため、データテーブルを作成できません....

SqlBulkcopy カラムマッピングなどはすべて問題ありません。また、DateTime に変更しても役に立ちません。

私は試した

しかし、それは役に立ちません。

この形式を受け入れるように SQL Server に指示する方法はありますか? それ以外の場合は、CSV リーダーでカスタム修正を作成しますが、SQL で修正することをお勧めします。

更新 2つの回答に続いて、私はこのようなSQLバルクコピーを使用しています(別の質問でStackoverflowで提案されているように):

CSV リーダー (上記の codeproject のリンクを参照) は文字列値を返します (厳密な型指定ではありません)。CSVreader は System.Data.IDataReader を実装しているので、次のようなことができます。

iDataReader からのすべてのフィールドは文字列であるため、CSVreader でかなり変更しない限り、C# のアプローチを使用できません。

したがって、私の質問はC#で修正する方法とは関係ありません。それはできますが、それを防ぎたいです。

in sql のようなものを実行すると奇妙です

バルクコピーでは機能しません。

理由はありますか?

アドバイスありがとう、プルン

0 投票する
2 に答える
490 参照

.net - SqlBulkCopy - 小さいデータセット (つまり 1000 行) で便利ですか?

SqlBulkCopy を実装してパフォーマンス テストを行う前に、いつ使用すべきか、比較的小さなデータ セット (1000 行程度) でも使用することが望ましいかどうかについて、誰かがガイダンスを持っているかどうか疑問に思っていました。この状況で使用するとオーバーヘッドがありますか、それとも妥当な数の行を挿入するときに常に使用する必要がありますか?

0 投票する
3 に答える
5306 参照

c# - C# の最適化: データベースに 2 億行を挿入する

速度を最適化したい次の(簡略化された)コードがあります。

速度を上げるために既に SQLBulkCopy を使用していますが、DataTable 自体に値を代入するのが遅いことがわかりました。

DataTables の仕組みがわからないので、最初に再利用可能な配列を作成し、それを DataRow に割り当ててから DataRow を DataTable に追加することで、不要なオーバーヘッドを作成しているのではないかと考えています。それとも、そもそも DataTable の使用は最適ではありませんか? 入力はデータベースから取得されます。

私はLOCについてはあまり気にしません。速度だけです。誰でもこれについてアドバイスできますか?

0 投票する
2 に答える
4732 参照

.net - .net: ジェネリック リストを DataReader に変換しますか?

こんにちは、winform に入力されたジェネリック リストがあり、そのデータを SQL サーバー テーブルに一括コピーとして送信したいと考えています。SqlBulkCopy クラスを読むと、ソースとしてデータ リーダーが必要になります。

さて、どうすればそれを DataReader に変換できますか?

ありがとうございました