Labels

admin (1) aix (1) alert (1) always-on (2) Architecture (1) aws (3) Azure (1) backup (3) BI-DWH (10) Binary (3) Boolean (1) C# (1) cache (1) casting (3) cdc (1) certificate (1) checks (1) cloud (3) cluster (1) cmd (7) collation (1) columns (1) compilation (1) configurations (7) Connection-String (2) connections (6) constraint (6) copypaste (2) cpu (2) csv (3) CTE (1) data-types (1) datetime (23) db (547) DB2 (1) deadlock (2) Denali (7) device (6) dotNet (5) dynamicSQL (11) email (5) encoding (1) encryption (4) errors (124) excel (1) ExecutionPlan (10) extended events (1) files (7) FIPS (1) foreign key (1) fragmentation (1) functions (1) GCP (2) gMSA (2) google (2) HADR (1) hashing (3) in-memory (1) index (3) indexedViews (2) insert (3) install (10) IO (1) isql (6) javascript (1) jobs (11) join (2) LDAP (2) LinkedServers (8) Linux (15) log (6) login (1) maintenance (3) mariadb (1) memory (4) merge (3) monitoring (4) MSA (2) mssql (444) mssql2005 (5) mssql2008R2 (20) mssql2012 (2) mysql (36) MySQL Shell (5) network (1) NoSQL (1) null (2) numeric (9) object-oriented (1) offline (1) openssl (1) Operating System (4) oracle (7) ORDBMS (1) ordering (2) Outer Apply (1) Outlook (1) page (1) parameters (2) partition (1) password (1) Performance (103) permissions (10) pivot (3) PLE (1) port (4) PostgreSQL (14) profiler (1) RDS (3) read (1) Replication (12) restore (4) root (1) RPO (1) RTO (1) SAP ASE (48) SAP RS (20) SCC (4) scema (1) script (8) security (10) segment (1) server (1) service broker (2) services (4) settings (75) SQL (74) SSAS (1) SSIS (19) SSL (8) SSMS (4) SSRS (6) storage (1) String (35) sybase (57) telnet (2) tempdb (1) Theory (2) tips (120) tools (3) training (1) transaction (6) trigger (2) Tuple (2) TVP (1) unix (8) users (3) vb.net (4) versioning (1) windows (14) xml (10) XSD (1) zip (1)

RESOURCE_SEMAPHORE wait type

RESOURCE_SEMAPHORE:

Long explanation: RESOURCE_SEMAPHORE Occurs when a query memory request cannot be granted immediately due to other concurrent queries. High waits and wait times may indicate excessive number of concurrent queries, or excessive memory request amounts.
Short explanation: memory grant pressure.
In order to get more data, use:
select * from sys.dm_exec_query_resource_semaphores
Returns the information about the current query-resource semaphore status.
  • total_memory_kb - Memory held by the resource semaphore in kilobytes. check it against target_memory_kb or max_target_memory_kb values.
  • waiter_count - the number of queries waiting for grants to be satisfied.

select * from sys.dm_exec_query_memory_grants
Returns information about the queries that have acquired a memory grant or that still require a memory grant to execute

SELECT cntr_value AS [Memory Grants Outstanding]
FROM sys.dm_os_performance_counters
WHERE OBJECT_NAME = 'MSSQL$MyInstance:Memory Manager'
AND counter_name = 'Memory Grants Outstanding'

SELECT OBJECT_NAME,cntr_value AS [Memory Grants Pending]
FROM sys.dm_os_performance_counters
WHERE OBJECT_NAME = 'MSSQL$MyInstance:Memory Manager'
AND counter_name = 'Memory Grants Pending'

An useful link regarding RESOURCE_SEMAPHORE:

Find the waiting reason of a waiting_task - sys.dm_os_waiting_tasks

SELECT *
FROM sys.dm_os_waiting_tasks
WHERE [session_id] = 71 -- or without filter on a specific session

SET NOEXEC ON

SET NOEXEC ON - it's exactly what is sound like - compiles each query but does not execute it.

Example:



DBCC OPENTRAN - display current open transactions

DBCC OPENTRAN

Display the current open/active transactions that may cause locks.



Get DBCC CHECKDB results - checkdb with tableresults

DBCC checkdb ... with tableresults

Because it's not suggested to run DBCC CHECKDB when the DB is active (in order not to overload the and not disturb users) - it should be good to run it when the DB is inactive, and it's possible to do it in a job and insert the results into a log table:

-- create the log table:
CREATE TABLE [dbo].[checkdbHistory](
[Error] [int] NULL,
[Level] [int] NULL,
[State] [int] NULL,
[MessageText] [varchar](7000) NULL,
[RepairLevel] [int] NULL,
[Status] [int] NULL,
[DbId] [int] NULL,
[Id] [int] NULL,
[IndId] [int] NULL,
[PartitionID] [int] NULL,
[AllocUnitID] [int] NULL,
[File] [int] NULL,
[Page] [int] NULL,
[Slot] [int] NULL,
[RefFile] [int] NULL,
[RefPage] [int] NULL,
[RefSlot] [int] NULL,
[Allocation] [int] NULL,
[TimeStamp] [datetime] NULL DEFAULT (GETDATE())
) ON [PRIMARY]
GO

-- this insertion csn be stored in a job:
INSERT INTO dbo.checkdbHistory 
( [Error], [Level], [State], MessageText, RepairLevel, 
[Status], [DbId], Id, IndId, PartitionId, 
AllocUnitId, [File], Page, Slot, RefFile, 
RefPage, RefSlot, Allocation)
EXEC ('dbcc checkdb(''DB_NAME'') with tableresults')
GO

In order to do this to all of the databases, run the insertion in a cursor.

http://www.mssqltips.com/sqlservertip/2325/capture-and-store-sql-server-database-integrity-history-using-dbcc-checkdb/

SET DEADLOCK_PRIORITY

SET DEADLOCK_PRIORITY - is exactly what it sounds like: Specifies the relative importance that the current session continue processing if it is deadlocked with another session.

SET DEADLOCK_PRIORITY { LOW | NORMAL | HIGH | <numeric-priority> | @deadlock_var | @deadlock_intvar }

<numeric-priority> ::= { -10 | -9 | -8 | … | 0 | … | 8 | 9 | 10 }
LOW maps to -5, NORMAL to 0, and HIGH to 5.

Force statistics update - WITH FULLSCAN

SQL Server automatically update statistics according to few rules. 
In order to force statistics update (even when SQL Server rules are not met) - use WITH FULLSCAN.

UPDATE STATISTICS TABLENAME WITH FULLSCAN

Note: sp_autostats doesn't force the statistics update.

Costs are estimated, lines thickness is actual

This one is important and confusing:
costs are estimated, lines thickness is actual!