質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

3回答

2535閲覧

SQLサーバーにて、ディスクキューの長さが大きくなり、処理待ちが発生しています。

ycy

総合スコア19

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

0クリップ

投稿2020/06/29 01:34

SQLサーバーにて、ディスクキューの長さが大きくなり、処理待ちが発生しています。

構成として、SSD2台(RAID1)+HDD2台(RAID1)となります。
tempdbをHDD側、データをSSD側に設定しています。

問題が発生しているのはSSD側となります。

利用中のサーバーでは4スロットしかなく、すべてのHDDスロットは使っています。
メモリは200GB程度ですべてのスロットを使用しています。

発生条件は、秒間1000件ほどの更新+INSERTを行う際に、
読み込み10MB/s程度、書き込み10MB/s程度なのですが、ディスクキューの長さが1000から10000ほどになります。
(CPU使用率は10%程度です)

SQLSERVER初回起動時などは、読み込み300MB/sなどで読み込みは出来ています。

SQLSERVERの仕様なのかもしれませんが、設定などで解決方法などありませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/06/29 01:51

SSDのヘルスチェックは行っていますか?
ycy

2020/06/29 01:55

SSDは購入後、半年程度です。DISKINFOでは問題なしです。
sazi

2020/06/29 02:15

並列実行では無く、シリアルに実行すると改善したりしませんか。
ycy

2020/06/29 02:23

シリアルであれば、負荷はほぼありません。 ただ、仕様上どうしても同時処理を行いたいのはあります。 想像ですが、ランダムアクセス状態で、遅くなっているような気がします。 シーケンシャルアクセスでは数百MB/sで動いているので。 データベースのデフラグのようなものであったり、空きメモリーをライトキャッシュにできたり・・ すれば解決しそうな気もしますが。
ycy

2020/06/29 02:43

RAID構成でのTRIMは利用できませんし、お手上げ状態です。 4KアライメントはOKです。 RAID構成前も構成後もSSDのベンチマークは十分に出ています。
sazi

2020/06/29 02:54 編集

では、並列処理の件数を下げて、並列数を増やしてみるとか。 キューイング数は増えるでしょうけど、一つ一つの待ち時間やサイズは短縮されるでしょうから。
ycy

2020/06/30 07:20

急の業務で、時間が取れませんでした。 並列処理数などの調整を試してみます。 大量にINSERTを行うとIDENTITYが約100近く空いた連番で数万件登録されており、 時間が経つと、間が埋められていくという症状です。 調整を試してみます。
guest

回答3

0

計測したのはだいぶ昔のバージョンですが、valuesを使った複数行のinsertは実行が遅くなりました。
(insert into table select )を1000行書くのと
insert into table values (),(),()…で1000行つなげて書くのでは私の環境では確か5倍近く前者が早かったです。
別の方に検証してもらったところ、列数や行数に関係がありそうで最適値を超えると遅くなるというものでした。valuesで一度に多くinsertするのはやめたほうがいいと思います。25個くらいが最速とかそういうスペックを考慮したレベルで調整しないといけない方法だったと認識しています。

投稿2020/06/30 10:33

sousuke

総合スコア3830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/06/30 14:59

パラレルだと駄目で、シリアルだと問題無いという事ですから、確認するとしても優先度は低いと思います。
sousuke

2020/06/30 15:29

他に具体的にみるところあればと思いますねー最優先ってわけではないですが、極端に遅くなる書き方をわざわざすることもないですしね。直ればラッキーくらいで。
guest

0

シリアルであれば、負荷はほぼありません。
ただ、仕様上どうしても同時処理を行いたいのはあります。

I/Oの負荷には違いなさそうなので、以下を確認してみてください。

バッファー プール拡張

直接は関係無いかとは思いますけど、以下も目を通されていた方が良いと思います。
トランザクション ログ ファイルのサイズの管理

投稿2020/06/30 07:35

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

大量のデータをINSERTしているのなら、BULK INSERT にしてみるとか?
質問にもっと具体的な情報を載せたほうが適切なコメントが付きやすいかと。

投稿2020/06/29 01:58

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ycy

2020/06/29 02:03 編集

概要としては、 1000件のレコードをまとめて読み込む。 ↓ 重複している 重複していないを判断。 ↓ 重複している場合、1000件のうち重複しているものをBULK UPDATE ↓ 重複していない場合、1000件のうち重複していないものをBULK INSERT のような形です。SQL文は1000件当たり3回の発行となります。 この処理が、並列で同時実行されています。
Orlofsky

2020/06/29 02:42

質問を修正してください。 今日のハードウェアはDWHでなくても100万件単位でまとめて処理するなんてごく普通のことなので、よほど非力なハードウェアでない限り1,000件単位ではなくまとめて処理しては? ・重複するデータはUPDATEで、 ・重複しないデータは副問合せで抜き出してINSERT のSQL2つで足りるのでは? ここはプログラミングの掲示板なので差し支えなない限り、CREATE TABLE, 数件で良いからデータの INSERTと現行のSQLを提示できた方が解決が早いかと。
sousuke

2020/06/29 13:38

1000件ってinsertのvaluesを使う関係ですか?
Orlofsky

2020/06/29 19:30

データをCSVで持っているのか、INSERT文で持っているのか提示されていません。
ycy

2020/06/30 07:29

急の業務で、時間が取れませんでした。 PHP+SQLSERVERの構成です。 データはWEB上の情報をスクレイプし、内容をSQLSERVERに保存しています。 SELECT文で、SELECT column_name FROM table_name WHERE with (nolock) (column_name=1) OR (column_name=2) OR ・・・ ↓ 返ってきたレコードの配列から重複を判断 ↓ INSERTは(重複がない場合) INSERT INTO KEY_VALUE (KEY_NO, STRING_VALUE, NUMBER_VALUE) VALUES (1, 'VALUE1', 100), (2, 'VALUE2', 200), (3, 'VALUE3', 300), UPDATEは(重複がある場合) UPDATE `テーブル名` SET `名前` = case `id` WHEN '1' THEN 'えみ' WHEN '3' THEN 'こうじ' END ,`都道府県` = case `id` WHEN '1' THEN '北海道' WHEN '3' THEN '福岡' END WHERE `id` IN ('1','3'); このような書き方にて行っています。
Orlofsky

2020/06/30 08:08

返信はいつでも構いません。 >質問を修正してください。 って書いています。 大元のデータはテーブルでしょうか?重複するデータはUPDATEし、調布しないデータはINSERTしたのですか?それとも、それぞれのUPDATE文かINSERT文か欲しいのですか? CREATE TABLEがないとわかりません。 整理して質問に https://teratail.com/help/question-tips#questionTips3-7 の [コード] で追記してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問