Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Open棟梁:バッチ・サンプルの性能測定(1)に使用した、各種リソース情報と、その測定結果。
USE [Northwind]
GO
/****** Object: Table [dbo].[Orders2] Script Date: 09/18/2012 20:02:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Orders2](
[OrderID] [int] NOT NULL,
[CustomerID] [nchar](5) NULL,
[EmployeeID] [int] NULL,
[OrderDate] [datetime] NULL,
[RequiredDate] [datetime] NULL,
[ShippedDate] [datetime] NULL,
[ShipVia] [int] NULL,
[Freight] [money] NULL,
[ShipName] [nvarchar](40) NULL,
[ShipAddress] [nvarchar](60) NULL,
[ShipCity] [nvarchar](15) NULL,
[ShipRegion] [nvarchar](15) NULL,
[ShipPostalCode] [nvarchar](10) NULL,
[ShipCountry] [nvarchar](15) NULL,
CONSTRAINT [PK_Orders2] PRIMARY KEY CLUSTERED
(
[OrderID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
<?xml version="1.0" encoding="utf-8" ?>
<ROOT>
-- DaoOrders2_D1_Insert
-- 2014/2/9 日立 太郎
INSERT INTO
[Orders2]
(
<DELCMA>
<INSCOL name="OrderID">[OrderID],</INSCOL>
<INSCOL name="CustomerID">[CustomerID],</INSCOL>
<INSCOL name="EmployeeID">[EmployeeID],</INSCOL>
<INSCOL name="OrderDate">[OrderDate],</INSCOL>
<INSCOL name="RequiredDate">[RequiredDate],</INSCOL>
<INSCOL name="ShippedDate">[ShippedDate],</INSCOL>
<INSCOL name="ShipVia">[ShipVia],</INSCOL>
<INSCOL name="Freight">[Freight],</INSCOL>
<INSCOL name="ShipName">[ShipName],</INSCOL>
<INSCOL name="ShipAddress">[ShipAddress],</INSCOL>
<INSCOL name="ShipCity">[ShipCity],</INSCOL>
<INSCOL name="ShipRegion">[ShipRegion],</INSCOL>
<INSCOL name="ShipPostalCode">[ShipPostalCode],</INSCOL>
<INSCOL name="ShipCountry">[ShipCountry],</INSCOL>
</DELCMA>
)
VALUES
(
<DELCMA>
<IF>@OrderID,</IF>
<IF>@CustomerID,</IF>
<IF>@EmployeeID,</IF>
<IF>@OrderDate,</IF>
<IF>@RequiredDate,</IF>
<IF>@ShippedDate,</IF>
<IF>@ShipVia,</IF>
<IF>@Freight,</IF>
<IF>@ShipName,</IF>
<IF>@ShipAddress,</IF>
<IF>@ShipCity,</IF>
<IF>@ShipRegion,</IF>
<IF>@ShipPostalCode,</IF>
<IF>@ShipCountry,</IF>
</DELCMA>
)
</ROOT>
-- DaoOrders2_S1_Insert
-- 2014/2/9 日立 太郎
INSERT INTO
[Orders2]
(
[OrderID],
[CustomerID],
[EmployeeID],
[OrderDate],
[RequiredDate],
[ShippedDate],
[ShipVia],
[Freight],
[ShipName],
[ShipAddress],
[ShipCity],
[ShipRegion],
[ShipPostalCode],
[ShipCountry]
)
VALUES
(
@OrderID,
@CustomerID,
@EmployeeID,
@OrderDate,
@RequiredDate,
@ShippedDate,
@ShipVia,
@Freight,
@ShipName,
@ShipAddress,
@ShipCity,
@ShipRegion,
@ShipPostalCode,
@ShipCountry
)
<?xml version="1.0" encoding="UTF-8" ?>
<ROOT>
SELECT
OrderID
FROM
Orders
ORDER BY
OrderID
</ROOT>
<?xml version="1.0" encoding="UTF-8" ?>
<ROOT>
SELECT
[OrderID],
[CustomerID],
[EmployeeID],
[OrderDate],
[RequiredDate],
[ShippedDate],
[ShipVia],
[Freight],
[ShipName],
[ShipAddress],
[ShipCity],
[ShipRegion],
[ShipPostalCode],
[ShipCountry]
FROM
[Orders]
WITH (UPDLOCK)
<WHERE>
WHERE
<LIST>AND [OrderID] IN(@OrderID)</LIST>
</WHERE>
</ROOT>
USE [Northwind]
GO
DECLARE @Counter INT
SET @Counter = 1
WHILE @Counter <= 2
BEGIN
INSERT INTO [dbo].[Orders]
([CustomerID]
,[EmployeeID]
,[OrderDate]
,[RequiredDate]
,[ShippedDate]
,[ShipVia]
,[Freight]
,[ShipName]
,[ShipAddress]
,[ShipCity]
,[ShipRegion]
,[ShipPostalCode]
,[ShipCountry])
VALUES
('VINET'
,5
,GETDATE()
,GETDATE()
,GETDATE()
,3
,32.38
,'Vins et alcools Chevalier'
,'59 rue de l''Abbaye'
,'Reims'
,'RJ'
,51100
,'France')
SET @Counter = @Counter + 1
END
GO
DECLARE cursorOrders cursor FOR SELECT * FROM [Northwind].[dbo].[Orders];
DECLARE @OrderID [int];
DECLARE @CustomerID [nchar](5);
DECLARE @EmployeeID [int];
DECLARE @OrderDate [datetime];
DECLARE @RequiredDate [datetime];
DECLARE @ShippedDate [datetime];
DECLARE @ShipVia [int];
DECLARE @Freight [money];
DECLARE @ShipName [nvarchar](40);
DECLARE @ShipAddress [nvarchar](60);
DECLARE @ShipCity [nvarchar](15);
DECLARE @ShipRegion [nvarchar](15);
DECLARE @ShipPostalCode [nvarchar](10);
DECLARE @ShipCountry [nvarchar](15);
-- カーソルオープン
OPEN cursorOrders
-- データを格納
FETCH NEXT FROM cursorOrders
INTO @OrderID, @CustomerID, @EmployeeID ,@OrderDate ,@RequiredDate ,@ShippedDate ,@ShipVia ,@Freight ,@ShipName ,@ShipAddress ,@ShipCity ,@ShipRegion ,@ShipPostalCode ,@ShipCountry
-- カーソルのデータが終わるまで繰り返す
WHILE @@FETCH_STATUS = 0
BEGIN
-- 繰り返し処理
INSERT INTO [Northwind].[dbo].[Orders2] VALUES
(@OrderID, @CustomerID, @EmployeeID ,@OrderDate ,@RequiredDate ,@ShippedDate ,@ShipVia ,@Freight ,@ShipName ,@ShipAddress ,@ShipCity ,@ShipRegion ,@ShipPostalCode ,@ShipCountry);
-- データを格納
FETCH NEXT FROM cursorOrders
INTO @OrderID, @CustomerID, @EmployeeID ,@OrderDate ,@RequiredDate ,@ShippedDate ,@ShipVia ,@Freight ,@ShipName ,@ShipAddress ,@ShipCity ,@ShipRegion ,@ShipPostalCode ,@ShipCountry
END
-- カーソル終了処理
CLOSE cursorOrders
DEALLOCATE cursorOrders
INSERT INTO [Orders2]
SELECT * FROM [Orders]
@daisukenishino2

This comment has been minimized.

Copy link
Owner Author

commented Aug 3, 2018

前提条件

データ

Northwindデーターベース

  • Ordersテーブル
  • データ
    • 測定1 : 830件
    • 測定2 : 1万件、10万件、20万件、100万件

測定方法

EXE

高分解能パフォーマンス・カウンタを使用
(QueryPerformanceCounter関数)

  • ExT : 実行時間
  • CT : CPU時間
    • KT : CPU時間(カーネル・モード)
    • UT : CPU時間(ユーザ・モード)

T-SQL

SQL Server Management Studioのクライアント統計を使用

システム情報

DBMS

SQL Server 2016 Express Edition

systeminfo

  • OS 名: Microsoft Windows 10 Pro
  • OS バージョン: 10.0.17134 N/A ビルド 17134
  • OS ビルドの種類: Multiprocessor Free
  • システム製造元: HP
  • システム モデル: HP ProBook 430 G3
  • システムの種類: x64-based PC
  • プロセッサ: 1 プロセッサインストール済みです。
    [01]: Intel64 Family 6 Model 78 Stepping 3 GenuineIntel ~2300 Mhz
  • BIOS バージョン: HP N78 Ver. 01.15, 2016/11/07
  • 物理メモリの合計: 16,281 MB
  • 利用できる物理メモリ: 9,328 MB
  • 仮想メモリ: 最大サイズ: 18,713 MB
  • 仮想メモリ: 利用可能: 9,735 MB
  • 仮想メモリ: 使用中: 8,978 MB
  • ページ ファイルの場所: C:\pagefile.sys

測定モデル(EXE)

概要

Ordersテーブルのデータを、
同じスキーマのOrders2テーブルに移す。

コミット・インターバル

  • 測定1 : 100レコード単位にコミットする。
  • 測定2 : 2,000レコード単位にコミットする。
    • 疑似フェッチでパラメタを使用しており、SQL Serverのパラメタ上限が2,100迄のため
    • ハンドルされていない例外: System.Data.SqlClient.SqlException:
      着信要求のパラメーターが多すぎます。
      サーバーがサポートするパラメーターは最大 2,100 個です。
      パラメーターの数を減らしてから、要求を再送信してください。

疑似フェッチ方式

疑似フェッチ方式を採用。

測定対象

測定対象の特徴については以下のリンクを参照下さい。

EXE

RerunnableBatch_sample

RerunnableBatch_sample2

RerunnableBatch_sample3

Transact-SQL

Cursor

SELECT > INSERT

@daisukenishino2

This comment has been minimized.

Copy link
Owner Author

commented Aug 3, 2018

測定結果1

RerunnableBatch_sample

静的

平均 ExT:955[msec], CT:480[msec], KT:175[msec], UT:305[msec]

  • ExT:1037[msec], CT:547[msec], KT:172[msec], UT:375[msec]
  • ExT:1010[msec], CT:453[msec], KT:172[msec], UT:281[msec]
  • ExT:994[msec], CT:438[msec], KT:188[msec], UT:250[msec]
  • ExT:1088[msec], CT:578[msec], KT:281[msec], UT:297[msec]
  • ExT:903[msec], CT:438[msec], KT:156[msec], UT:281[msec]
  • ExT:887[msec], CT:391[msec], KT:172[msec], UT:219[msec]
  • ExT:949[msec], CT:406[msec], KT:125[msec], UT:281[msec]
  • ExT:958[msec], CT:547[msec], KT:203[msec], UT:344[msec]
  • ExT:851[msec], CT:500[msec], KT:156[msec], UT:344[msec]
  • ExT:876[msec], CT:500[msec], KT:125[msec], UT:375[msec]

動的

平均 ExT:1193[msec], CT:722[msec], KT:158[msec], UT:564[msec],

  • ExT:1162[msec], CT:719[msec], KT:141[msec], UT:578[msec]
  • ExT:1167[msec], CT:734[msec], KT:141[msec], UT:594[msec]
  • ExT:1223[msec], CT:688[msec], KT:94[msec], UT:594[msec]
  • ExT:1104[msec], CT:609[msec], KT:78[msec], UT:531[msec]
  • ExT:1241[msec], CT:750[msec], KT:156[msec], UT:594[msec]
  • ExT:1170[msec], CT:719[msec], KT:219[msec], UT:500[msec]
  • ExT:1205[msec], CT:750[msec], KT:219[msec], UT:531[msec]
  • ExT:1117[msec], CT:750[msec], KT:188[msec], UT:563[msec]
  • ExT:1206[msec], CT:656[msec], KT:156[msec], UT:500[msec]
  • ExT:1336[msec], CT:844[msec], KT:188[msec], UT:656[msec]

RerunnableBatch_sample2

静的

平均 ExT:767[msec], CT:381[msec], KT:116[msec], UT:266[msec]

  • ExT:874[msec], CT:422[msec], KT:94[msec], UT:328[msec]
  • ExT:646[msec], CT:328[msec], KT:63[msec], UT:266[msec]
  • ExT:758[msec], CT:406[msec], KT:125[msec], UT:281[msec]
  • ExT:818[msec], CT:375[msec], KT:156[msec], UT:219[msec]
  • ExT:647[msec], CT:297[msec], KT:78[msec], UT:219[msec]
  • ExT:715[msec], CT:422[msec], KT:125[msec], UT:297[msec]
  • ExT:797[msec], CT:422[msec], KT:141[msec], UT:281[msec]
  • ExT:833[msec], CT:406[msec], KT:172[msec], UT:234[msec]
  • ExT:729[msec], CT:328[msec], KT:94[msec], UT:234[msec]
  • ExT:855[msec], CT:406[msec], KT:109[msec], UT:297[msec]

動的

平均 ExT:1036[msec], CT:631[msec], KT:116[msec], UT:516[msec]

  • ExT:1109[msec], CT:641[msec], KT:94[msec], UT:547[msec]
  • ExT:1063[msec], CT:656[msec], KT:63[msec], UT:594[msec]
  • ExT:1081[msec], CT:672[msec], KT:172[msec], UT:500[msec]
  • ExT:1080[msec], CT:688[msec], KT:188[msec], UT:500[msec]
  • ExT:889[msec], CT:609[msec], KT:141[msec], UT:469[msec]
  • ExT:1018[msec], CT:594[msec], KT:31[msec], UT:563[msec]
  • ExT:945[msec], CT:563[msec], KT:141[msec], UT:422[msec]
  • ExT:892[msec], CT:531[msec], KT:125[msec], UT:406[msec]
  • ExT:1150[msec], CT:688[msec], KT:109[msec], UT:578[msec]
  • ExT:1133[msec], CT:672[msec], KT:94[msec], UT:578[msec]

RerunnableBatch_sample3

平均 ExT:522[msec], CT:88[msec], KT:17[msec], UT:71[msec]

  • ExT:430[msec], CT:94[msec], KT:31[msec], UT:63[msec]
  • ExT:574[msec], CT:78[msec], KT:0[msec], UT:78[msec]
  • ExT:589[msec], CT:94[msec], KT:16[msec], UT:78[msec]
  • ExT:484[msec], CT:94[msec], KT:31[msec], UT:63[msec]
  • ExT:629[msec], CT:109[msec], KT:47[msec], UT:63[msec]
  • ExT:597[msec], CT:141[msec], KT:31[msec], UT:109[msec]
  • ExT:481[msec], CT:78[msec], KT:16[msec], UT:63[msec]
  • ExT:470[msec], CT:63[msec], KT:0[msec], UT:63[msec]
  • ExT:415[msec], CT:47[msec], KT:0[msec], UT:47[msec]
  • ExT:548[msec], CT:78[msec], KT:0[msec], UT:78[msec]

Transact-SQL

Cursor

平均 ExT:582[msec], CT: - [msec], KT: - [msec], UT: - [msec]

image

SELECT > INSERT

平均 ExT:11[msec], CT: - [msec], KT: - [msec], UT: - [msec]

image

@daisukenishino2

This comment has been minimized.

Copy link
Owner Author

commented Aug 3, 2018

結果の分析1

# 測定モデル 処理時間(msec)
1-1 RerunnableBatch_sample 静的 955
1-2 動的 1,193
2-1 RerunnableBatch_sample2 静的 767
2-2 動的 1,036
3 RerunnableBatch_sample3 静的 522
4 Transact-SQL > Cursor 582
5 Transact-SQL > SELECT > INSERT 11

image

ラウンド・トリップ軽減の比較分析

RerunnableBatch_sampleとRerunnableBatch_sample2でラウンド・トリップ軽減したが、1筐体内でループバック・インターフェースで通信しているため、大きな性能差が出なかった(830回を9回に減らして200msec程度の差)。これがクライアント-サーバ間の通信となると、ラウンド・トリップのオーバーヘッドが大きくなり性能差が大きくなる。

静的SQLと動的SQLの比較分析

静的パラメタライズド・クエリと動的パラメタライズド・クエリの比較の際は、
CTを比較し、1件あたり 250msec / 830件 = 0.3msec / 件 程度と動的処理も高速。

※ XMLタグ数によるオーバヘッドについては、コチラを参照。

EXEとT-SQLの比較分析

  • EXE : RerunnableBatch_sample3 はバッチ専用の処理方式であり、CTを見ると、AP側の処理時間は、100msec以下と高速。
    因みに、ExTは500msec程度、掛っているので、DB側の処理の方が時間が掛っていることが解る。

  • EXE : RerunnableBatch_sample3(DB→AP→DB) は、
    比較対象の、 T-SQL : Cursor (DB→DB)と比べても十分速い事が解る。

  • T-SQL : Select > Insert は、非常に高速だが、間に処理を含めることができない。

@daisukenishino2

This comment has been minimized.

Copy link
Owner Author

commented Aug 6, 2018

測定結果2

RerunnableBatch_sample(静的

1万件

  • ExT:9188[msec], CT:5453[msec], KT:1984[msec], UT:3469[msec]
  • ExT:8058[msec], CT:5531[msec], KT:2047[msec], UT:3484[msec]
  • ExT:7042[msec], CT:5172[msec], KT:1828[msec], UT:3344[msec]
  • ExT:8149[msec], CT:5766[msec], KT:2156[msec], UT:3609[msec]
  • ExT:7883[msec], CT:5734[msec], KT:1938[msec], UT:3797[msec]
  • ExT:9375[msec], CT:5453[msec], KT:2016[msec], UT:3438[msec]
  • ExT:7775[msec], CT:5281[msec], KT:1906[msec], UT:3375[msec]
  • ExT:8977[msec], CT:5859[msec], KT:2172[msec], UT:3688[msec]
  • ExT:7967[msec], CT:5172[msec], KT:1750[msec], UT:3422[msec]
  • ExT:9161[msec], CT:5469[msec], KT:1797[msec], UT:3672[msec]

10万件

  • ExT:76111[msec], CT:52734[msec], KT:18016[msec], UT:34719[msec]
  • ExT:75945[msec], CT:53578[msec], KT:18172[msec], UT:35406[msec]
  • ExT:74696[msec], CT:53484[msec], KT:17625[msec], UT:35859[msec]
  • ExT:72110[msec], CT:51531[msec], KT:19391[msec], UT:32141[msec]
  • ExT:69156[msec], CT:50297[msec], KT:17156[msec], UT:33141[msec]

20万件

  • ExT:155149[msec], CT:109547[msec], KT:37078[msec], UT:72469[msec]
  • ExT:149833[msec], CT:105828[msec], KT:35516[msec], UT:70313[msec]

100万件

N/A

RerunnableBatch_sample2(静的

1万件

  • ExT:5639[msec], CT:4234[msec], KT:1234[msec], UT:3000[msec]
  • ExT:5480[msec], CT:4016[msec], KT:1156[msec], UT:2859[msec]
  • ExT:5625[msec], CT:4094[msec], KT:1266[msec], UT:2828[msec]
  • ExT:5701[msec], CT:4203[msec], KT:1375[msec], UT:2828[msec]
  • ExT:5602[msec], CT:4063[msec], KT:1141[msec], UT:2922[msec]
  • ExT:5742[msec], CT:4031[msec], KT:1172[msec], UT:2859[msec]
  • ExT:5770[msec], CT:4109[msec], KT:1188[msec], UT:2922[msec]
  • ExT:5594[msec], CT:3984[msec], KT:1250[msec], UT:2734[msec]
  • ExT:5560[msec], CT:4094[msec], KT:1141[msec], UT:2953[msec]
  • ExT:5561[msec], CT:4078[msec], KT:1266[msec], UT:2813[msec]

10万件

  • ExT:51188[msec], CT:39547[msec], KT:10969[msec], UT:28578[msec]
  • ExT:51467[msec], CT:39531[msec], KT:11031[msec], UT:28500[msec]
  • ExT:54153[msec], CT:41031[msec], KT:11047[msec], UT:29984[msec]
  • ExT:53608[msec], CT:41188[msec], KT:11953[msec], UT:29234[msec]
  • ExT:53042[msec], CT:40953[msec], KT:11625[msec], UT:29328[msec]

20万件

  • ExT:105219[msec], CT:79844[msec], KT:22031[msec], UT:57813[msec]
  • ExT:113258[msec], CT:85344[msec], KT:24094[msec], UT:61250[msec]

100万件

N/A

RerunnableBatch_sample3(静的

1万件

  • ExT:2230[msec], CT:797[msec], KT:141[msec], UT:656[msec]
  • ExT:2188[msec], CT:719[msec], KT:47[msec], UT:672[msec]
  • ExT:2481[msec], CT:703[msec], KT:94[msec], UT:609[msec]
  • ExT:2174[msec], CT:719[msec], KT:141[msec], UT:578[msec]
  • ExT:2293[msec], CT:891[msec], KT:109[msec], UT:781[msec]
  • ExT:2261[msec], CT:766[msec], KT:47[msec], UT:719[msec]
  • ExT:2243[msec], CT:750[msec], KT:141[msec], UT:609[msec]
  • ExT:2284[msec], CT:672[msec], KT:109[msec], UT:563[msec]
  • ExT:2247[msec], CT:719[msec], KT:141[msec], UT:578[msec]
  • ExT:2245[msec], CT:703[msec], KT:78[msec], UT:625[msec]

10万件

  • ExT:20703[msec], CT:7328[msec], KT:1016[msec], UT:6313[msec]
  • ExT:18764[msec], CT:7172[msec], KT:1359[msec], UT:5813[msec]
  • ExT:18827[msec], CT:6641[msec], KT:1078[msec], UT:5563[msec]
  • ExT:18790[msec], CT:6922[msec], KT:1281[msec], UT:5641[msec]
  • ExT:18796[msec], CT:7172[msec], KT:1344[msec], UT:5828[msec]
  • ExT:18718[msec], CT:7203[msec], KT:1391[msec], UT:5813[msec]
  • ExT:18658[msec], CT:6969[msec], KT:1234[msec], UT:5734[msec]
  • ExT:19024[msec], CT:6891[msec], KT:1281[msec], UT:5609[msec]
  • ExT:19119[msec], CT:7016[msec], KT:1391[msec], UT:5625[msec]
  • ExT:19109[msec], CT:6844[msec], KT:1203[msec], UT:5641[msec]

20万件

  • ExT:38376[msec], CT:14375[msec], KT:1969[msec], UT:12406[msec]
  • ExT:38908[msec], CT:14359[msec], KT:2203[msec], UT:12156[msec]
  • ExT:38408[msec], CT:13922[msec], KT:1953[msec], UT:11969[msec]
  • ExT:42259[msec], CT:16328[msec], KT:2313[msec], UT:14016[msec]
  • ExT:41773[msec], CT:16047[msec], KT:2063[msec], UT:13984[msec]

100万件

  • ExT:198943[msec], CT:74766[msec], KT:10641[msec], UT:64125[msec]
  • ExT:187223[msec], CT:69531[msec], KT:11063[msec], UT:58469[msec]

Transact-SQL > Cursor

1万件

image

10万件

image

20万件

image

100万件

image

Transact-SQL > SELECT > INSERT

1万件

image

10万件

image

20万件

image

100万件

image

@daisukenishino2

This comment has been minimized.

Copy link
Owner Author

commented Aug 6, 2018

結果の分析2

単位は、msec

測定モデル\データ件数 830件 1万件 10万件 20万件 100万件
RerunnableBatch_sample(静的 955 8,356 73,604 152,491 N/A
RerunnableBatch_sample2(静的 767 5,627 52,692 109,239 N/A
RerunnableBatch_sample3(静的 522 2,265 19,051 39,945 193,083
Transact-SQL > Cursor 582 2,419 17,949 42,744 176,551
Transact-SQL > SELECT > INSERT 11 35 244 467 2,172

Transact-SQL > SELECT > INSERTは、単純なInsert処理より高速なので、
  ヒープを直接処理しているため高速な模様(比較対象として不適切)。

image

※ データを見ると、性能はデータ件数に比例することを確認できる。

  • 疑似フェッチ方式なので、データ件数が増えてもメモリ・リークなどは起こさない。
  • また、EXE : RerunnableBatch_sample3(DB → AP → DB) は、比較対象の、T-SQL : Cursor (DB → DB)と比べて同等程度の性能だが、1筐体内でループバック・インターフェースで通信しているため、大きな性能差が出ていないものと思われる。従って、ネットワーク経由となると、コミット・インターバルのラウンド・トリップ分、クライアント-サーバ間の通信オーバーヘッドが増えて遅くなると考えられる。
@daisukenishino

This comment has been minimized.

Copy link

commented Aug 7, 2018

追加の調査と結果

RerunnableBatch_sample2(動的)の100万件の処理時間

処理時間の計測

結果

静的 : 546,195(推定値)---> 動的 : 778,368

  • ExT:783472[msec], CT:653578[msec], KT:117828[msec], UT:535750[msec]
  • ExT:773263[msec], CT:652172[msec], KT:117594[msec], UT:534578[msec]

RerunnableBatch_sample3でローカルIPアドレスを使用した際の100万件の処理時間

処理時間の計測

  • ローカル・ループバック・アドレスから、ローカルIPアドレスに変更して計測。
    その際、ルーティング・テーブルを変更してデフォルト・ゲートウェイ経由にする。
>route ADD 192.168.179.3 MASK 255.255.255.255 192.168.179.1 METRIC 3
  • また、コミット・インターバル(上限2,100)をチューニングして性能に与える影響を調査する。
    (疑似フェッチでパラメタを使用しており、SQL Serverのパラメタ上限が2,100迄のため)

結果

コミット・インターバル = 100

ローカル・ループバック・アドレス : 193,083 ---> ローカルIPアドレス : 1053,107

  • ExT:1039615[msec], CT:87141[msec], KT:22859[msec], UT:64281[msec]
  • ExT:1066599[msec], CT:89047[msec], KT:24016[msec], UT:65031[msec]

コミット・インターバル = 2,000

ローカル・ループバック・アドレス : 290,963 ---> ローカルIPアドレス : 781,757

  • ローカル・ループバック・アドレス
    • ExT:283370[msec], CT:66094[msec], KT:6172[msec], UT:59922[msec]
    • ExT:298555[msec], CT:69563[msec], KT:5828[msec], UT:63734[msec]
  • ローカルIPアドレス
    • ExT:780203[msec], CT:76813[msec], KT:12359[msec], UT:64453[msec]
    • ExT:783311[msec], CT:80953[msec], KT:13844[msec], UT:67109[msec]
@daisukenishino2

This comment has been minimized.

Copy link
Owner Author

commented Aug 8, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.