Common scenarios to avoid in OLTP
Database Design
|
Rule |
Description |
Value |
Source |
Problem Description |
|
1 |
High Frequency queries having a high number of table joins. |
>4 |
Sys.dm_exec_sql_text Sys.dm_exec_cached_plans |
High frequency queries with lots of joins can be too normalized for high OLTP scalability. |
|
2 |
Frequently updated tables having # indexes. |
>3 |
Sys.indexes sys.dm_db_index_operational_stats |
Excessive index maintenance for OLTP. |
|
3 |
Big IOs Table Scans Range Scans |
>1 |
Perfmon object SQL Server Access Methods Sys.dm_exec_query_stats |
A missing index flushes the cache. |
|
4 |
Unused Indexes. |
Index not in Sys.dm_db_index_usage_stats. If an index is NEVER used, it will not appear in the DMV sys.dm_db_index_usage_stats |
Avoid Index maintenance for unused indexes. |
|
CPU
|
Rule |
Description |
Value |
Source |
Problem Description |
|
1 |
Signal Waits |
>25% |
Sys.dm_os_wait_stats |
Time in runnable queue is pure CPU wait. |
|
2 |
Plan reuse |
<90% |
Perfmon object SQL Server Statistics |
OLTP identical transactions should ideally have >95% plan reuse. |
|
3 |
Parallelism: Cxpacket waits |
>5% |
Sys.dm_os_wait_stats |
Parallelism reduces OLTP throughput. CXPACKET indicates that multiple CPUs are working in parallel, dividing up the query in smaller pieces. Ordinarily a well tuned OLTP application would not parallelize unless an index is missing, there is an incomplete WHERE clause, or the query is not a true OLTP transaction. |
Memory
|
Rule |
Description |
Value |
Source |
Problem Description |
|
1 |
Page life expectancy |
<300 sec |
Perfmon object SQL Server Buffer Manager SQL Server Buffer Nodes |
Page life expectancy is the average number of seconds a data page stays in cache. Low values could indicate a cache flush that is caused by a big read. Pure OLTP workloads do NOT issue big reads, thus possible missing index. |
|
2 |
Page life expectancy |
Drops by 50% |
Perfmon object SQL Server Buffer Manager |
Page life expectancy is the average number of seconds a data page stays in cache. Low values could indicate a cache flush that is caused by a big read. Pure OLTP workloads do NOT issue big reads, thus possible missing index. |
|
3 |
Memory Grants Pending |
>1 |
Perfmon object SQL Server Memory Manager |
Current number of processes waiting for a workspace memory grant. |
|
4 |
SQL cache hit ratio |
<90% |
SQL cache hit ratio falls under 90% for sustained periods of time greater than 60 sec. |
It is likely that large scans have to be performed, which in turn flushes out the buffer cache. |
IO
|
Rule |
Description |
Value |
Source |
Problem Description |
|
1 |
Average Disk sec/read |
>20 ms |
Perfmon object Physical Disk |
Reads should take 4-8 ms without any IO pressure. |
|
2 |
Average Disk sec/write |
>20 ms |
Perfmon object Physical Disk |
Writes (sequential) can be as fast as 1 ms for transaction log. |
|
3 |
Big IOs Table Scans Range Scans |
>1 |
Perfmon object SQL Server Access Methods |
A missing index flushes the cache. |
|
4 |
If Top 2 values for wait stats are any of the following: ASYNCH_IO_COMPLETION IO_COMPLETION LOGMGR WRITELOG PAGEIOLATCH_x |
Top 2 |
Sys.dm_os_wait_stats |
If top 2 wait_stats values include IO, there is an IO bottleneck. |
|
5 |
Low bytes per sec. |
Perfmon object Physical Disk |
Blocking
|
Rule |
Description |
Value |
Source |
Problem Description |
|
1 |
Block percentage |
>2% |
Sys.dm_db_index_operational_stats |
Frequency of blocks. |
|
2 |
Block process report |
30 sec |
Sp_configure profiler |
Report of statements. |
|
3 |
Average Row Lock Waits |
>100ms |
Sys.dm_db_index_operational_stats |
Duration of blocks. |
|
4 |
If Top 2 values for wait stats are any of the following: LCK_M_BU LCK_M_IS LCK_M_IU LCK_M_IX LCK_M_RIn_NL LCK_M_RIn_S LCK_M_RIn_U LCK_M_RIn_X LCK_M_RS_S LCK_M_RS_U LCK_M_RX_S LCK_M_RX_U LCK_M_RX_X LCK_M_S LCK_M_SCH_M LCK_M_SCH_S LCK_M_SIU LCK_M_SIX LCK_M_U LCK_M_UIX LCK_M_X |
Top 2 |
Sys.dm_os_wait_stats |
If top 2 wait_stats values include locking, there is a blocking bottleneck. |
|
5 |
High number of deadlocks |
>5 per hour |
Trace flag 1204 to display in the errorlog and or the profiler deadlock graph. |
If the deadlock occurs with the same participant SQL commands or operations multiple times, it is likely that there is a locking problem. |
Network
|
Rule |
Description |
Value |
Source |
Problem Description |
|
1 |
High network latency coupled with an application that has many round trips to the database. |
Output queue length >2 |
Perfmon object: Network Interface |
Indicates that the latency between the application server and the database is high. Could be caused by significant network infrastructure between the application and the instance of SQL Server. |
|
2 |
Network bandwidth is used up. |
Packets Outbound Discarded Packets Outbound Errors Packets Received Discarded Packets Received Errors |
Perfmon object: Network Interface |
Dropped packets are detected. |
In summary, given the high volume of identical small transactions that characterize OLTP, transactions per second and resource usage can be improved as follows:
- Database designs usually keep the number of indexes to a functional minimum as every insert, update, and delete incurs index maintenance.
- CPU can be reduced with plan reuse and join reduction.
- IO performance can be reduced with good indexing, join reduction, and high page life expectancy.
- Memory is optimal when there are no sudden drops in Page Life Expectancy.
- Sorts can be limited with index usage. That is, a certain sort order is supported by an index that is sorted the same way, either ascending or descending.
- Blocking can be reduced with index design and short transactions.
Common scenarios to avoid in OLTP的更多相关文章
- Common Scenarios to avoid with DataWarehousing
Database Design Rule Description Value Source Problem Description 1 Excessive sorting and RID lookup ...
- 8 Mistakes to Avoid while Using RxSwift. Part 1
Part 1: not disposing a subscription Judging by the number of talks, articles and discussions relate ...
- Microsoft SQL Server Trace Flags
Complete list of Microsoft SQL Server trace flags (585 trace flags) REMEMBER: Be extremely careful w ...
- Android Lint Checks
Android Lint Checks Here are the current list of checks that lint performs as of Android Studio 2.3 ...
- (WPF) 基本题
What is WPF? WPF (Windows Presentation foundation) is a graphical subsystem for displaying user inte ...
- Processing Images
https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_ ...
- IMS Global Learning Tools Interoperability™ Implementation Guide
Final Version 1.1 Date Issued: 13 March 2012 Latest version: http://www.imsglobal ...
- 9.Parameters
1.Optional and Named Parameters calls these methods can optionally not specify some of the arguments ...
- C# Development 13 Things Every C# Developer Should Know
https://dzone.com/refcardz/csharp C#Development 13 Things Every C# Developer Should Know Written by ...
随机推荐
- NHibernate系列文章十七:NHibernate Session管理(附程序下载)
摘要 NHibernate的Session的管理涉及到NHibernate的两个最重要的对象ISessionFactory和ISession.ISessionFactory的生成非常消耗资源,通常都在 ...
- Hibernate day02笔记
对象状态与一级缓存 状态介绍 hibernate 规定三种状态:瞬时态.持久态.脱管态 状态 瞬时态:transient,session没有缓存对象,数据库也没有对应记录. ...
- Corba概念(GIOP、IIOP、IOR、ORB、IDL)
CORBA公用对象请求代理(调度)程序体系结构(Common Object Request Broker Architecture),缩写为 CORBA,是对象管理组织(Object Manageme ...
- delphi 10 seattle 安卓服务开发(二)
关于delphi 10 移动服务开发的几张图
- mysql 重复数据防止插入:)
insert into table (id, name, age) values(1, "A", 19) on duplicate key update name=values(n ...
- 调用百度地图API的应用混淆后出问题
1 混淆后出问题,程序异常退出 在proguard-project.txt中添加 -libraryjars libs/BaiduLBS_Android.jar -keep class com.baid ...
- Binary Tree Maximum Path Sum
Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. ...
- (转载)IOS中UIScrollView的属性和委托方法
http://www.jizhishusheng.com/?p=453 ---- 以下内容来自 UIScrollView 类负责所有基于 UIKit 的滚动操作一.创建 1. CGRect bou ...
- php protobuff 使用
http://hi.baidu.com/sing520/item/a6e98a3545fe1ef2e6bb7ad0 php 不支持uint32 不支持空结构 不支持package
- DOS批量递归删除文件夹
@echo off for /d /r E:\test01\ %%i in (test) do rd /s /q "%%i" pause