12 倍, 24 倍

12 倍, 24 倍

12 倍, 24 倍 .. インメモリテーブルの処理時間倍率, SQL Server 2014。
インメモリテーブルは、テーブルをメモリへつくる機能。
SQL Server 2014 Enterprise は、インメモリテーブルできる。

 ディスクのテーブルと。

インメモリのテーブルの処理時間と、くらべる.
12 倍 = SCHEMA_AND_DATA設定の インメモリテーブル がはやい.
24 倍 = SCHEMA_ONLY 設定の インメモリテーブル がはやい.

 SCHEMA_AND_DATA,

インメモリのテーブルの DURABILITY 設定
SCHEMA_AND_DATA のインメモリのテーブルは、ディスクへデータを保存する。
SCHEMA_ONLY のインメモリのテーブルは、ディスクへデータを保存しない。

 10,000 トランザクション x 100 同時.

負荷をかけてみる。
サンプルデータベースは、[AdventureWorks2012].
トランザクションは、受注処理.

1,000,000,000 トランザクション時間は、コーヒーをひとくち飲む時間.

広告

40% はやい

40% はやい

40% はやい .. ストアドプロシージャのネイティブコンパイル, SQL Server 2014.
ストアドプロシージャのネイティブコンパイルは、ストアドプロシージャを DLL へ
変える SQL Server 2014 Enterprise の機能.

 40%

insert と update とをインメモリのテーブルへ負荷をかけてみる.
40% ストアドプロシージャをネイティブコンパイルすると、はやくなる.
ネイティブコンパイルの対象テーブルは、インメモリのテーブル.

 WITH NATIVE_COMPILATION

ストアドプロシージャの抜粋..
CREATE PROCEDURE [Sales].[usp_UpdateSalesOrderShipInfo_native]
 @SalesOrderID uniqueidentifier ,
 @ShipDate datetime2,
 @Comment nvarchar(128),
 @Status tinyint,
 @TaxRate smallmoney,
 @Freight money,
 @CarrierTrackingNumber nvarchar(25)
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS
BEGIN ATOMIC WITH
(TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N’us_english’)

 [AdventureWorks2012]

サンプルURL = https://msftdbprodsamples.codeplex.com/releases
サンプル負荷 = aw_inmem_sample_sql_2014_ctp2.zip
対象ストアドプロシージャ:
 usp_InsertSalesOrder
 usp_UpdateSalesOrderShipInfo

テーブルをインメモリへ、ストアドプロシージャをネイティブコンパイルへ.

3 秒 = 6 億件, 列ストアインデックス

3 秒 = 6 億件, 列ストアインデックス

3 秒 = 6 億件, 列ストアインデックス .. をつかって TPC-H クエリー1 が 32論理コアのサーバーにて。
TPC-H は、意思決定支援のデータベース用ベンチマーク.列ストアインデックスは、SQL Server 2014 の意思決定のクエリー用のデータベースインデックス.

 3 秒

は、クエリー1 の処理時間.
6 億 = TPC-H の LINEITEM テーブルのレコード数
2 個 = Intel Xeon E5-2580 2..7GHz
16 個 = CPU 物理コア数
32 個 = CPU 論理コア数
512 GB = メモリサイズ
100 = DBGEN -s の引数
Query 1 = 計測クエリー
SQL Server 2014 Enterprise CTP2 = データベースシステム
Clustered Columnstore Index テーブル = ORDERS, LINEITEM
測定方法: 構文解析とコンパイルの時間 0, 物理読み取り数 0 の時間

 TPC_H Query 1

SELECT
  L_RETURNFLAG,
  L_LINESTATUS,
  SUM(L_QUANTITY) AS SUM_QTY,
  SUM(L_EXTENDEDPRICE) AS SUM_BASE_PRICE,
  SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)) AS SUM_DISC_PRICE,
  SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)*(1+L_TAX)) AS SUM_CHARGE,
  AVG(L_QUANTITY) AS AVG_QTY,
  AVG(L_EXTENDEDPRICE) AS AVG_PRICE,
  AVG(L_DISCOUNT) AS AVG_DISC,
  COUNT(*) AS COUNT_ORDER
FROM LINEITEM
WHERE L_SHIPDATE <= dateadd(dd, -90, cast('1998-12-01' as datetime))
GROUP BY L_RETURNFLAG, L_LINESTATUS
ORDER BY L_RETURNFLAG,L_LINESTATUS

 3 秒 vs. 8 秒

3 秒は、32 個のCPU 論理コアの物理サーバでの処理時間.
8 秒は、12 個のCPU 論理コアの仮想サーバでの処理時間.

SQL Server 2014 Enterprise Edition の列ストアインデックスみてる.

時間半分 .. Delayed Durablity

時間半分 .. Delayed Durablity

時間半分 .. Delayed Durablity をためしてみる. SQL Server 2014 .
Delayed Durability は SQL Server 2014 すべてのエディションで使える新機能.
データベース AdventureWorks2012 をつかって、たしかめてみる

 SQL Server

バージョン: SQL Server 2014 CTP 2
データベース: AdventureWorks2012

 試験手段: ostress

詳細: “SQL Server 2014 CTP2 In-Memory OLTP Sample,based”
https://msftdbprodsamples.codeplex.com/releases
インメモリテーブル機能のテスト方法を、Delayed Durability へつかう.

 test.cmd

set n=10
set order_count=100000
set include_update=1

:DISABLED
ostress -Sserver1 -E -dAdventureWorks2012 -Q”ALTER DATABASE [AdventureWorks2012] SET DELAYED_DURABILITY=DISABLED;Exec Demo.usp_DemoReset;Exec sp_flush_log”
ostress -Sserver1 -E -dAdventureWorks2012 -Q”Exec Demo.usp_DemoInsertSalesOrders @use_inmem=0, @order_count=%order_count%, @include_update=%include_update%” -n%n%
echo ——————-DELAYED_DURABILITY=DISABLED ——————————–

:FORCED
ostress -Sserver1 -E -dAdventureWorks2012 -Q”ALTER DATABASE [AdventureWorks2012] SET DELAYED_DURABILITY=FORCED;Exec Demo.usp_DemoReset;Exec sp_flush_log”
ostress -Sserver1 -E -dAdventureWorks2012 -Q”Exec Demo.usp_DemoInsertSalesOrders @use_inmem=0, @order_count=%order_count%, @include_update=%include_update%” -n%n%
echo ——————-DELAYED_DURABILITY=FORCED ———————————-

「トランザクションの持続性の制御」
http://msdn.microsoft.com/ja-jp/library/dn449490(v=sql.120).aspx

Delayed Durablity をあじわってみてる.

8 秒 = 6 億件, 列ストアインデックス

8 秒 = 6 億件, 列ストアインデックス

8 秒 = 6 億件, 列ストアインデックス .. をつかって TPC-H クエリー1 が。
TPC-H は、意思決定支援のデータベース用ベンチマーク.列ストアインデックスは、SQL Server 2014 の意思決定のクエリー用のデータベースインデックス.

 8 秒

は、クエリー処理時間
6 億 = TPC-H の LINEITEM テーブルのレコード数
12 個 = 仮想マシンの仮想CPUコア数
50 GB = 仮想マシンのメモリサイズ
100 = DBGEN -s の引数
Query 1 = 計測クエリー
SQL Server 2014 Enterprise ベータ = データベースシステム
Clustered Columnstore Index = テーブル LINEITEM のインデックス
測定方法: 構文解析とコンパイルの時間 0, 物理読み取り数 0 の時間

 TPC_H Query 1

SELECT
  L_RETURNFLAG,
  L_LINESTATUS,
  SUM(L_QUANTITY) AS SUM_QTY,
  SUM(L_EXTENDEDPRICE) AS SUM_BASE_PRICE,
  SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)) AS SUM_DISC_PRICE,
  SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)*(1+L_TAX)) AS SUM_CHARGE,
  AVG(L_QUANTITY) AS AVG_QTY,
  AVG(L_EXTENDEDPRICE) AS AVG_PRICE,
  AVG(L_DISCOUNT) AS AVG_DISC,
  COUNT(*) AS COUNT_ORDER
FROM LINEITEM
WHERE L_SHIPDATE <= dateadd(dd, -90, cast('1998-12-01' as datetime))
GROUP BY L_RETURNFLAG, L_LINESTATUS
ORDER BY L_RETURNFLAG,L_LINESTATUS

SQL Server 2014 列ストアインデックスに、わくわくしてる.

インメモリ, 列ストアインデックスの実行プラン

インメモリ, 列ストアインデックスの実行プラン

インメモリ, 列ストアインデックス .. の実行プランをあじわってみる。
データベースは、Microsoft SQL Server 2014 ベータ版。
データとクエリーは、TPC-H。
ハードウェアは、Intel NUC D54250WYK。

インメモリは、メモリ最適化データベース。
列ストアインデックスは、非クラスター化インメモリ列ストアインデックス。
CPU は、Core i5、2 コア、4 スレッド。
メモリは、16 GB。

 xVelocity

わくわくが、xVelocity にある。
非クラスター化インメモリ列ストアインデックスは、xVelocity つかってる。
“An xVelocity memory optimized columnstore index, groups and stores data for each column and then joins all the columns to complete the whole index”

600 万件 から 3,000 万件へ LINEITEM をふやしてみよう。