Skip to content
Branch: master
Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
create-database-and-tables fix filegroups Oct 20, 2016
stored-procedures simplifying deployment scripts Sep 12, 2016
README.md

README.md

Order Processing Benchmark using In-Memory OLTP

Sample order processing workload that can be used for benchmarking transactional processing with in-memory technologies. The scripts in this folder leverage the In-Memory OLTP feature in SQL Server 2016.

Some results from this benchmark:

About this sample

  • Applies to: SQL Server 2016 (or higher)
  • Key features: In-Memory OLTP
  • Workload: OLTP
  • Programming Language: T-SQL
  • Authors: Jos de Bruijn, Liang Yang

Running this sample

  1. Create the database, tables, and stored procedures using the T-SQL scripts in the corresponding subfolders.
  • The hash indexes are sized for a scale factor of 100, which translates to a 24GB database, with bucket_count double the row count. For larger database and memory size, adjust the bucket counts accordingly.
    • The max bucket_count in SQL Server 2016 is 1 billion. It is OK to have a higher row count. The benchmark performs well with bucket_count of 1 billion and row counts of 5 billion.
  • There are plans to publish scripts for initial populate of the tables. Timeline is TBD.
  • Scripts are also provided for corresponding disk-based tables and traditional stored procedures, to compare performance between disk-based and memory-optimized tables.
  • Data size across the tables is distributed as follows:
Table Weight
Customer 1
Orders 5
OrderLines 25
Products 10
PurchaseCriteria 1
Fulfillment 0
  • The scale factor is a number that governs the actual database size for a given run of the workload. The actual row count for a given table is [scale factor * weight * 10,000]. For example, with scale factor 5, the Products table has 5 * 10 * 10,000 = 500,000 rows.
  1. Run the stored procedures using the following mix.
  • There are plans to make a scalable workload driver available as well. Timeline is TBD.
Stored Procedure Weight
GetOrdersByCustomerID 8
GetProductsByType 6
GetProductsPriceByPK 4
ProductSelectionCriteria 2
InsertOrder 10
FulfillOrders 1

The recommendation is to use two different drivers:

  • a. Main order processing driver(s), each multi-threaded (e.g., 100 or 200 clients), and running the procedures GetOrdersByCustomerID, GetProductsByType, GetProductsPriceByPK, ProductSelectionCriteria, and InsertOrder.
  • b. Fulfillment driver, which runs the procedure FulfillOrders. This driver should have a single client to avoid conflicts.

Workload description

Transaction Type Description
GetOrdersByCustomerID Read-only Select customer info, orders, and order lines for a given customer.
GetProductsByType Read-only Select top 10 products of a given type, ordered by price.
GetProductsPriceByPK Read-only Select all products in a given ID range, ordered by price.
ProductSelectionCriteria Read-only Select top 20 products in a given ID range with the highest computed “closeness” factor against the PurchaseCriteria.
InsertOrder Read-write Insert a new order for a given customer with up to five order lines.
FulfillOrders Read-write Fulfill 10 oldest outstanding orders.

More information

You can’t perform that action at this time.