web-dev-qa-db-ja.com

新しいサーバーでのカーソルパフォーマンス

仕様の新しいサーバーを購入しました:HP ProLiant ML310e Gen8 v2 8 GBシングルメモリ、Intel Xeon E3-1220v3 3,1 GHz、500 GB SATA 7.5K RPM、Windows Server 2012 R2 x64、SQL Server Standard 2014 x64、RAID 0

私のノートブックとの比較:ASUS X200CA 2 GBシングルメモリ、IntelCeleronデュアルコア1.5GHz、500 GB SATA 7.5K RPM、Windows 7 Ultimate x64、SQL Server Express 2014 x64、AHCI

古いサーバー(古いサーバーの方が速い)との違いが大きすぎるため、このノートブックを比較しました。私は新しいサーバーでいくつかの構成を設定し、この投稿から少し良くなっています SQL Server 2012は2008より遅い

テスト:(5回の試行)

select top 9000 * from faktur_detail

新しいサーバー:

CPU time = 20 ms,  elapsed time = 756 ms.
CPU time = 12 ms,  elapsed time = 720 ms.
CPU time = 8 ms,  elapsed time = 840 ms.
CPU time = 14 ms,  elapsed time = 689 ms.
CPU time = 17 ms,  elapsed time = 740 ms.

私のノート:

CPU time = 250 ms,  elapsed time = 2403 ms.
CPU time = 172 ms,  elapsed time = 2541 ms.
CPU time = 219 ms,  elapsed time = 2848 ms.
CPU time = 140 ms,  elapsed time = 2426 ms.
CPU time = 172 ms,  elapsed time = 2410 ms.

更新、挿入、その他の通常のコマンドを試してみたところ、新しいサーバーがノートブックよりも高速であることを示しました。問題はカーソルにあります:

テスト:(5回の試行)

declare @ketqty varchar (50),
        @ketqtyjual varchar (50),
        @ketqtybonus varchar (50),
        @kd_barang varchar (10),
        @kd_rec int,
        @qty numeric,
        @qtyjual numeric,
        @qtybonus numeric

  DECLARE @RPREKAPJUALALL_Cursor CURSOR
  SET @RPREKAPJUALALL_Cursor = CURSOR SCROLL DYNAMIC FOR 

  select kd_rec, qtyjual , qtyBonus , Qty, kd_barang  from RPREKAPJUALALL where NamaKomputer  ='serverhp' 

  OPEN @RPREKAPJUALALL_Cursor
  FETCH NEXT FROM @RPREKAPJUALALL_Cursor INTO @kd_rec, @qtyjual,@qtybonus, @qty, @kd_barang
  WHILE @@FETCH_STATUS = 0
  BEGIN
      EXEC sp_countsatuandetail  @KD_BARANG, @qty , @RESULT = @ketqty   OUTPUT 
      EXEC sp_countsatuandetail  @KD_BARANG, @qtyjual  , @RESULT = @ketqtyjual    OUTPUT 
      EXEC sp_countsatuandetail  @KD_BARANG, @qtybonus , @RESULT = @ketqtybonus   OUTPUT 

      update RPREKAPJUALALL set ketqty =@ketqty , ketqtyjual  =@ketqtyjual ,ketqtybonus =@ketqtybonus where NamaKomputer ='serverhp' and kd_rec =@kd_rec 

     FETCH NEXT FROM @RPREKAPJUALALL_Cursor INTO @kd_rec, @qtyjual,@qtybonus, @qty, @kd_barang
   END

  CLOSE @RPREKAPJUALALL_Cursor
  DEALLOCATE @RPREKAPJUALALL_Cursor

新しいサーバー:

86 seconds.
93 seconds.
85 seconds.
83 seconds.
81 seconds.

私のノート:

16 seconds.
12 seconds.
14 seconds.
18 seconds.
16 seconds.

カーソルがSQLServerにとって本当に悪いことは知っていますが、以前のプログラマーがストアドプロシージャに非常に多くのカーソルを残していたため、すべてのカーソルをすぐに通常の更新に切り替えることはできません。

この問題の原因は何でしょうか?私は今この2週間で苦労しています。たくさんの記事を読んでいます。このタイプのサーバーは、古いサーバーと比較して、SELECTコマンドを使用しても約2.8倍遅くなるため、データベースサーバーになるのに適していないと結論付けました。

古いサーバー:Intel Core i3、1TB SATA HDD 7.5K RPM、16GBデュアルメモリ、Windows 7 Ultimate x64、SQL Server 2008Expressx86。

どういうわけか、今はこの新しいサーバーを使わなければなりません。しばらくの間、このカーソルの問題について助けてください。この新しいサーバーは今のところ非常に遅く、1週間のデータを表示しています。これが1ヶ月、数年後にどのように終わったか想像できません。

任意のヘルプをいただければ幸いです。どうもありがとうございました。

1
Jun Rikson

ごめんなさい、この質問を更新しないでください。この質問の2か月後にこのケースを解決しました。

何度か試行錯誤した後、パフォーマンスへの最大の影響は、オペレーティングシステムとデータの間で分離されたハードディスクを使用することです。

新しいハードディスクを購入しようとしていますが、ストレージシステムをRAIDからAHCIに変更すると、データ処理のパフォーマンスにかなりの違いが生じるようです。さて、オンラインクラウドサービスの安全のために、メンテナンスジョブで1時間のバックアップを行います。

BIOS設定にいくつかの変更を加えます。これは、このpdfで説明されているパフォーマンスにも多くの影響を与えます http://h20195.www2.hp.com/v2/GetPDF.aspx%2F4AA3-6555ENW.pdf

また、メモリを4x8GBにアップグレードしています

私の古いサーバーと比較すると、今では8倍高速です。

助けてくれてありがとう。

1
Jun Rikson