DRAG DROP
###BeginCaseStudy###
Case Study: 7
Fourth Coffee
Background
Corporate Information
Fourth Coffee is global restaurant chain. There are more than 5,000 locations worldwide.
Physical Locations
Currently a server at each location hosts a SQL Server 2012 instance. Each instance contains
a database called StoreTransactions that stores all transactions from point of sale and uploads
summary batches nightly.
Each server belongs to the COFFECORP domain. Local computer accounts access the
StoreTransactions database at each store using sysadmin and datareaderwriter roles.
Planned changes
Fourth Coffee has three major initiatives:
• The FT department must consolidate the point of sales database infrastructure.
• The marketing department plans to launch a mobile application for micropayments.
• The finance department wants to deploy an internal tool that will help detect fraud.
Initially, the mobile application will allow customers to make micropayments to buy coffee
and other items on the company web site. These micropayments may be sent as gifts to other
users and redeemed within an hour of ownership transfer. Later versions will generate
profiles based on customer activity that will push texts and ads generated by an analytics
application.
When the consolidation is finished and the mobile application is in production, the
micropayments and point of sale transactions will use the same database.
Existing Environment
Existing Application Environment
Some stores have been using several pilot versions of the micropayment application. Each
version currently is in a database that is independent from the point of sales systems. Some
versions have been used in field tests at local stores, and others are hosted at corporate
servers. All pilot versions were developed by using SQL Server 2012.
Existing Support Infrastructure
The proposed database for consolidating micropayments and transactions is called
CoffeeTransactions. The database is hosted on a SQL Server 2014 Enterprise Edition
instance and has the following file structures:
Business Requirements
General Application Solution Requirements
The database infrastructure must support a phased global rollout of the micropayment
application and consolidation.
The consolidated micropayment and point of sales database will be into a CoffeeTransactions
database. The infrastructure also will include a new CoffeeAnalytics database for reporting
on content from CoffeeTransactions.
Mobile applications will interact most frequently with the micropayment database for the
following activities:
• Retrieving the current status of a micropayment;
• Modifying the status of the current micropayment; and
• Canceling the micropayment.
The mobile application will need to meet the following requirements:
• Communicate with web services that assign a new user to a micropayment by using a
stored procedure named usp_AssignUser.
• Update the location of the user by using a stored procedure named
usp_AddMobileLocation.
The fraud detection service will need to meet the following requirements:
• Query the current open micropayments for users who own multiple micropayments by
using a stored procedure named usp.LookupConcurrentUsers.
• Persist the current user locations by using a stored procedure named
usp_Mobilel_ocationSnapshot.
• Look at the status of micropayments and mark micropayments for internal
investigations.
• Move micropayments to dbo.POSException table by using a stored procedure named
ups_DetectSuspiciousActivity.
• Detect micropayments that are flagged with a StatusId value that is greater than 3 and
that occurred within the last minute.
The CoffeeAnalytics database will combine imports of the POSTransaction and
MobileLocation tables to create a UserActivity table for reports on the trends in activity.
Queries against the UserActivity table will include aggregated calculations on all columns
that are not used in filters or groupings.
Micropayments need to be updated and queried for only a week after their creation by the
mobile application or fraud detection services.
Performance
The most critical performance requirement is keeping the response time for any queries of the
POSTransaction table predictable and fast.
Web service queries will take a higher priority in performance tuning decisions over the fraud
detection agent queries.
Scalability
Queries of the user of a micropayment cannot return while the micropayment is being
updated, but can show different users during different stages of the transaction.
The fraud detection service frequently will run queries over the micropayments that occur
over different time periods that range between 30 seconds and ten minutes.
The POSTransaction table must have its structure optimized for hundreds of thousands of
active micropayments that are updated frequently.
All changes to the POSTransaction table will require testing in order to confirm the expected
throughput that will support the first year’s performance requirements.
Updates of a user’s location can tolerate some data loss.
Initial testing has determined that the POSTransaction and POSException tables will be
migrated to an in-memory optimized table.
Availability
In order to minimize disruption at local stores during consolidation, nightly processes will
restore the databases to a staging server at corporate headquarters.
Technical Requirements
Security
The sensitive nature of financial transactions in the store databases requires certification of
the COFFECORP\Auditors group at corporate that will perform audits of the data. Members
of the COFFECORP\Auditors group cannot have sysadmin or datawriter access to the
database.
Compliance requires that the data stewards have access to any restored StoreTransactions
database without changing any security settings at a database level.
Nightly batch processes are run by the services account in the COFFECORP\StoreAgent
group and need to be able to restore and verify the schema of the store databases match.
No Windows group should have more access to store databases than is necessary.
Maintainability
You need to anticipate when POSTransaction table will need index maintenance.
When the daily maintenance finishes, micropayments that are one week old must be available
for queries in UserActivity table but will be queried most frequently within their first week
and will require support for in-memory queries for data within first week.
The maintenance of the UserActivity table must allow frequent maintenance on the day’s
most recent activities with minimal impact on the use of disk space and the resources
available to queries. The processes that add data to the UserActivity table must be able to
update data from any time period, even while maintenance is running.
The index maintenance strategy for the UserActivity table must provide the optimal structure
for both maintainability and query performance.
All micropayments queries must include the most permissive isolation level available for the
maximum throughput.
In the event of unexpected results, all stored procedures must provide error messages in text
message to the calling web service.
Any modifications to stored procedures will require the minimal amount of schema changes
necessary to increase the performance.
Performance
Stress testing of the mobile application on the proposed CoffeeTransactions database
uncovered performance bottlenecks. The sys.dm_os_wait_stats Dynamic Management View
(DMV) shows high wait_time values for WRTTELOG and PAGEIOLATCHJJP wait types
when updating the MobileLocation table.
Updates to the MobileLocation table must have minimal impact on physical resources.
Supporting Infrastructure
The stored procedure usp_LookupConcurrentUsers has the current implementation:
The current stored procedure for persisting a user location is defined in the following code:
The current stored procedure for managing micropayments needing investigation is defined
in the following code:
The current table, before implementing any performance enhancements, is defined as follows:
###EndCaseStudy###
You need to redesign the system to meet the scalability requirements of the application.
Develop the solution by se lecting and arranging the required code blocks in the correct order.
You may not need all of the code blocks.
Answer: See the explanation.
Explanation:
Note:
* MEMORY_OPTIMIZED_DATA
First create a memory-optimized data filegroup and add a container to the filegroup.
Then create a memory-optimized table.
* You must specify a value for the BUCKET_COUNT parameter when you create the
memory-optimized table. In most cases the bucket count should be between 1 and 2 times
the number of distinct values in the index key.
* Example:
— create a durable (data will be persisted) memory-optimized table
— two of the columns are indexed
CREATE TABLE dbo.ShoppingCart (
ShoppingCartId INT IDENTITY(1,1) PRIMARY KEY NONCLUSTERED,
UserId INT NOT NULL INDEX ix_UserId NONCLUSTERED HASH WITH
(BUCKET_COUNT=1000000),
CreatedDate DATETIME2 NOT NULL,
TotalPrice MONEY
) WITH (MEMORY_OPTIMIZED=ON)
GO
Box 3 and 4 are inverted; box 7 is not required because only one memory optimized filegroup is allowed per database.
https://www.mssqltips.com/sqlservertip/3121/getting-started-with-sql-server-2014-inmemory-oltp/
There is no CLUSTERED index on in memory tables.
Alter Database CoffeeTransactions
add filegroup CoffeeTransactions_inmem
contains memory_optimized_data
create table dbo.POSTransaction(
POSTransactionId int not null,
UserId int not null index x_UserId nonclustered hash with (backet_count=900000),
PosLocation int not null,
StatusId int not null,
CreateDate datetime2 not null,
Price money)
with(memory_optimized=on,durability=schema_only)
Primary Key is a requirement for Memory Optimized tables.
But a missing index on POSTransactionId does not meet the required “thousands of active micropayments are updated frequently”.
There are 1000000 Bucket Counts neccessary. But there is no NONCLUSTERED PRIMARY KEY – Option WITH this Bucket_count available in choices. @Dim: your solution meets as only one the syntax rules but not the conditions in scenario. (???)