MSSQL 19

[MSSQL] 22. DB 로그인 Login 계정 조회 쿼리

DB Instance에 존재하는 로그인(Login) 계정을 조회할 때 사용하는 쿼리입니다. SSMS 상에서 로그인 폴더로 확인하는 방법도 있지만, 권한을 확인하기위해선 일일히 열어봐야하는 번거로움이 있습니다. 아래 쿼리를 사용하여 각 로그인에 대한 권한(role)까지 한눈에 파악이 가능합니다. IF OBJECT_ID(N'tempdb..#LOGIN') IS NOT NULL BEGIN DROP TABLE #LOGIN; END CREATE TABLE #LOGIN ( login_name SYSNAME ,role_name SYSNAME ); INSERT INTO #LOGIN SELECT SL.name AS login_name ,SR.name AS role_name FROM master.sys.server_role..

SQL Server 2023.05.11

[MSSQL] 21. 성능 많이 먹는 쿼리 플랜(실행 계획) 확인 쿼리

DB Instance에 성능을 많이 사용하고 있는 쿼리에 대한 실행 계획을 조회하는 쿼리입니다. SELECT TOP 20 db_name(qp.dbid) AS dbName , execution_count AS execCnt ,(total_worker_time / execution_count) / 1000 AS avgCPU ,(total_elapsed_time / execution_count) / 1000 AS avgDuration , total_logical_reads / execution_count AS avgReads , max_worker_time AS maxCPU , max_elapsed_time AS maxDuration , max_logical_reads AS maxReads , total_wo..

SQL Server 2023.05.11

[MSSQL] 20. 미싱 인덱스 Missing Index 확인 쿼리

미싱 인덱스(Missing Index)를 조회할 때 사용하는 쿼리입니다. EqualCols는 = 조건으로 검색이 들어오는 컬럼에 대한 내용이 조회되며, InEqualCols는 범위 조건(,Between) 등으로 검색이 들어오는 컬럼에 대한 내용이 조회됩니다. AvgTotalUserCost는 해당 미싱 인덱스를 생성했을 때 SQL Server가 개선이 될 것으로 예상하는 비용인데, 높을수록(100에 가까울수록) 그 효용이 높습니다. 사이트의 상황에 따라 다르지만, AvgTotalUserCost > 10 이상인 인덱스에 대해 우선적으로 확인하고, 그 이후 10 미만의 인덱스에 대해 검토하는 것도 시간 효율성 측면에서 좋은 방법이라고 생각합니다. SELECT db.[name] AS [dbName] ,id.[o..

SQL Server 2023.05.11

[MSSQL] 19. 성능 많이 먹는 프로시저 조회

인스턴스에 캐시된 프로시저 중에 성능을 많이 사용하고 있는 프로시저를 조회하는 쿼리입니다. 장애 상황 시 이슈 프로시저를 잡아내는데 사용할 수 있습니다. DECLARE @productversion VARCHAR(128) DECLARE @Majorversion INT SET @productversion = convert(VARCHAR(128), SERVERPROPERTY('ProductVersion')) SET @Majorversion = convert(INT, left(@productversion, charindex('.', @productversion) - 1)) IF @Majorversion > 9 BEGIN SELECT TOP 300 DB_NAME(d.database_id) AS dbName ,OB..

SQL Server 2023.04.25

[MSSQL] 18. 성능 많이 먹는 쿼리 조회

인스턴스의 캐시에 올라와있는 쿼리 중 비용을 많이 소비하고 있는 쿼리를 뽑는 쿼리입니다. 장애 상황에서 제일 문제되는 쿼리를 뽑을 때 사용할 수 있습니다. SELECT TOP 300 db_name(execText.dbid) AS dbName ,execution_count AS execCnt ,(total_worker_time / execution_count) / 1000 AS avgCPU ,(total_elapsed_time / execution_count) / 1000 AS avgDuration , total_logical_reads / execution_count AS avgReads , max_worker_time AS maxCPU , max_elapsed_time AS maxDuration , m..

SQL Server 2023.04.25

[MSSQL] 17. 파티션 테이블 조회 및 Row수 구하기

DB에 존재하는 모든 사용자 파티션 테이블을 조회하고 Row 수를 구할 때 사용하는 쿼리입니다. IF OBJECT_ID(N'tempdb..#DB') IS NOT NULL BEGIN DROP TABLE #DB END CREATE TABLE #DB (name sysname, dbid smallint) INSERT INTO #DB (name, dbid) SELECT name, dbid FROM master.dbo.sysdatabases WHERE name not in ('master', 'msdb', 'model') GO DECLARE @dbname sysname DECLARE @min_dbid smallint DECLARE @SQL varchar(8000) IF OBJECT_ID(N'tempdb..#PART..

SQL Server 2023.04.25

[MSSQL] 16. 용량 큰 테이블 크기, Row 수 구하기

DB에 존재하는 모든 사용자 테이블의 용량과 Row Count를 빠르게 구하는 쿼리입니다. 어떤 오브젝트가 용량을 많이 차지하고 있는지 빠르게 확인할 수 있습니다. IF OBJECT_ID(N'tempdb..#DB') IS NOT NULL BEGIN DROP TABLE #DB END CREATE TABLE #DB (name sysname, dbid smallint) INSERT INTO #DB (name, dbid) SELECT name, dbid FROM master.dbo.sysdatabases WHERE name not in ('master', 'msdb', 'model') GO DECLARE @dbname sysname DECLARE @min_dbid smallint DECLARE @SQL varc..

SQL Server 2023.04.25

[MSSQL] 15. DISK I/O 많이 쓰는 데이터 파일 찾는 쿼리

DB를 구성하는 MDF, NDF, LDF 파일의 기본적인 용량과 IO Stats를 조회할 때 사용할 수 있습니다. IF OBJECT_ID(N'tempdb..#DB') IS NOT NULL BEGIN DROP TABLE #DB END CREATE TABLE #DB (name sysname, dbid smallint) INSERT INTO #DB (name, dbid) SELECT name, dbid FROM master.dbo.sysdatabases WHERE name not in ('master', 'msdb', 'model') GO DECLARE @dbname sysname DECLARE @min_dbid smallint DECLARE @SQL varchar(8000) IF OBJECT_ID(N'tem..

SQL Server 2023.04.25

[MSSQL] 14. 데이터 파일 사용률 조회

DB별 파일 그룹, 물리적 파일 위치(mdf, ndf, ldf), 파일 크기, 파일 안에서의 실제 사용률, 빈공간 등을 조회할 때 사용할 수 있습니다. IF OBJECT_ID(N'tempdb..#DB') IS NOT NULL BEGIN DROP TABLE #DB END CREATE TABLE #DB (name sysname, dbid smallint) INSERT INTO #DB (name, dbid) SELECT name, dbid FROM master.dbo.sysdatabases WHERE name not in ('master', 'msdb', 'model') GO DECLARE @dbname sysname DECLARE @min_dbid smallint DECLARE @SQL varchar(800..

SQL Server 2023.04.20

[MSSQL] 13. VLF 갯수 보는 쿼리

DB별 로그 사이즈, LDF 내 Log 사용률 등을 조회할 때 사용합니다. DBCC SQLPERF(LOGSPACE) GO 만약 DB별 Recovery Mode, VLF 갯수 등도 조회가 필요하다면 아래 쿼리도 사용 가능합니다. IF OBJECT_ID(N'tempdb..#LOGFILECNT') IS NOT NULL BEGIN DROP TABLE #LOGFILECNT; END CREATE TABLE #LOGFILECNT ( database_id INT ,dbname SYSNAME ,vlfcount INT ); INSERT INTO #LOGFILECNT (database_id, dbname, vlfcount) SELECT database_id, name, 0 AS vlfcount FROM sys.databas..

SQL Server 2023.04.20