[치정] 제3장 - 시스템 함수, 저장 프로세스와 DBCC SQLPERF 명령을 사용하여 SQLServer를 감시한다(2)
SQLServer 역시 SQLServer를 모니터링하고 현재 프로세스, 세션, 요청 및 잠금에 대한 자세한 정보를 얻을 수 있는 일련의 시스템 저장 프로세스를 제공합니다.본고는 이러한 모니터링을 실현하기 위해 시스템 저장 과정을 보여줄 것이다.
시나리오:
때때로 응용 프로그램이 갑자기 느려져서 데이터베이스 응답을 기다려야 하는 것을 발견할 수 있다. 이 때 요청이 막히거나 끊겼는지 빨리 확인해야 한다.
준비:
이 문서에서는 다음 저장 프로세스를 사용하여 현재 프로세스에 대한 정보를 얻습니다.
단계:
1. SSMS를 열고 SQLServer 인스턴스에 연결하고 새 질의 창을 엽니다.
2. 새 질의 창에 다음 스크립트를 입력합니다.
USE tempdb
GO
--
IF OBJECT_ID('tempdb.dbo.#tbl_SPWho') IS NOT NULL
BEGIN
DROP TABLE tempdb.dbo.#tbl_SPWho
END
CREATE TABLE tempdb.dbo.#tbl_SPWho
(
spid SMALLINT ,
ecid SMALLINT ,
[status] NVARCHAR(30) ,
loginame NVARCHAR(128) ,
hostName NVARCHAR(128) ,
blk CHAR(5) ,
dbname NVARCHAR(128) ,
cmd NVARCHAR(16) ,
request_id INT
)
--
INSERT INTO tempdb.dbo.#tbl_SPWho
EXEC sp_who
GO
-- sp_who2
IF OBJECT_ID('tempdb.dbo.#tbl_SPWho2') IS NOT NULL
BEGIN
DROP TABLE tempdb.dbo.#tbl_SPWho2
END
CREATE TABLE tempdb.dbo.#tbl_SPWho2
(
spid SMALLINT ,
[status] NVARCHAR(30) ,
[login] NVARCHAR(128) ,
HostName NVARCHAR(128) ,
BlkBy CHAR(5) ,
DBName NVARCHAR(128) ,
Command NVARCHAR(16) ,
CPUTime INT ,
DiskIO INT ,
LastBatch NVARCHAR(50) ,
ProgramName NVARCHAR(100) ,
SPID2 SMALLINT ,
REQUESTID INT
)
--
INSERT INTO tempdb.dbo.#tbl_SPWho2
EXEC sp_who2
GO
--
SELECT spid AS SessionID ,
ecid AS ExecutionContextID ,
[status] AS ProcessStatus ,
loginame AS LoginName ,
hostname AS HostName ,
blk AS BlockedBy ,
dbname AS DatabaseName ,
cmd AS CmomandType ,
request_id AS RequestID
FROM dbo.#tbl_SPWho
WHERE dbname = 'AdventureWorks'
GO
--
SELECT spid AS SessionID ,
ecid AS ExecutionContextID ,
[status] AS ProcessStatus ,
loginame AS LoginName ,
hostname AS HostName ,
blk AS BlockedBy ,
dbname AS DatabaseName ,
cmd AS CmomandType ,
request_id AS RequestID
FROM dbo.#tbl_SPWho
WHERE blk > 0
GO
--
SELECT spid AS SessionID ,
ecid AS ExecutionContextID ,
[status] AS ProcessStatus ,
loginame AS LoginName ,
hostname AS HostName ,
blk AS BlockedBy ,
dbname AS DatabaseName ,
cmd AS CmomandType ,
request_id AS RequestID
FROM dbo.#tbl_SPWho
WHERE [STATUS] = 'suspended'
GO
분석:
이 예에서 sp 를 저장하기 위해 두 개의 임시 테이블을 만들었습니다who 및 spwho2 저장 프로세스가 되돌아오는 데이터 결과를 INSERT... EXECUTE 명령을 통해 임시 테이블에 삽입합니다. 예에서 spwho의 사용, spwho2의 사용은 같다.
임시 테이블로 데이터를 저장하는 이유는 spwho/sp_who2 이 두 시스템의 저장 프로세스는 결과를 직접 선별할 수 없기 때문에 테이블에 저장하여 2차 처리를 해야 한다.
확장 정보:
DMO가 SQL 서버에 가입하기 전에 spmoitor、sp_who2、sp_who 이 세 시스템의 저장 과정은 시스템의 현재 정보를 감시하는 데 광범위하게 사용된다.
Sp_모니터는 위에서 언급한 바와 같이 시스템 통계 함수와 호환하여 사용할 수 있다.
Sp_who는 현재 SQLServer 프로세스, 세션 및 요청에 대한 자세한 정보를 얻을 수 있는 시스템 스토리지 프로세스입니다.이 저장 프로세스를 통해 누가 어떤 조작이나 명령을 실행했는지, 어떤 프로세스가 어떤 프로세스에 의해 막혔는지 알 수 있다.이 저장 프로세스에는 선택할 수 있는 매개 변수가 있습니다: @loginame (유형은sysname),session ID (유형은smallint),ACTIVE.@loginame를 보내서 특정한 로그인 이름의 정보를 선별할 수 있으며, 세션 ID도 정의되면 특정sessionid의 정보를 선별할 수 있습니다.매개 변수가 없으면 범위 실례 단계의 정보를 가져옵니다.만약 VIEW SYSTEM STATE 권한이 없다면, 이 세션의 정보만 볼 수 있습니다.ACTIVE 매개변수를 사용한 경우저장 프로세스가 활성 프로세스로 돌아갑니다.
spwho가 반환한 결과:
Spid:sessionID, 즉 세션 ID를 반환합니다. 이 ID 중 1~50은 시스템 세션입니다.51 이상 세션은 사용자 세션 ID입니다.
Exid: 병렬 질의가 발생했기 때문에 결과에 동일한 SPID가 여러 개 있을 수 있습니다.이 열은 질의의 컨텍스트 ID를 나타냅니다.0은 부모 라인을 대표하고 다른 값은 하위 라인을 대표한다.
Status: 프로세스의 상태를 되돌려줍니다. Dormant (휴면), Running (실행 중), Background (백그라운드에서 실행 중인 프로세스는 잠금 탐지 중), Rollback (업무가 롤백 중), Pending (마운트, 이 세션은 사용 가능한 작업 라인을 기다리고 있음), Runnable (세션의 작업은 시간 측정을 받을 때 계획 프로그램의 실행 대기열에 있음 있음 있음 있음),Spinloop (세션 작업이 조절 잠금이 사용 가능해지기를 기다리고 있음), Suspended (입출력 완료와 같은 세션 대기 시간).
Loginame: 세션에 대한 로그인 이름
Hostname: 세션에 해당하는 시스템 이름
Blk: 세션이 막히면, 막힌 세션 ID가 표시됩니다. 없으면 0으로 내려갑니다.
Dbname: 특정 세션에서 요청한 데이터베이스 이름을 반환합니다.
Cmd: 데이터베이스 엔진의 명령 유형을 반환합니다.
Request_id: 세션의 요청 ID입니다.
sp 에 상대적who,sp_who2는 더 많은 정보를 되돌려주지만 spwho2는 공개되지 않은 시스템 저장 프로세스로 온라인 총서에서 관련 정보를 찾을 수 없다는 것을 의미한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.