분류 전체보기 25

[QLDB] 2. PartiQL

PartiQL 이란? PartiQL은 AWS에서 개발한 SQL 호환 쿼리 엑세스를 제공하는 쿼리로, QLDB를 포함하여 DynamoDB, RedShift, TwinMaker 등 여러 AWS 서비스에서 활용되는 언어입니다. NoSQL 기반의 Document(JSON, Ion 등) 형식의 데이터를 RDBMS 언어로 조회/삽입/수정/삭제 가능하게 구현해놓은 점에서 다른 언어들과 차별점이 있습니다. PartiQL은 기존 RDBMS에서 쿼리를 날리던 방식인 SELECT ~ FROM ~ WHERE 절로 손쉽게 작성할 수 있습니다. (INSERT, UPDATE, DELETE도 동일합니다.) 기존 SQL 언어와 차이점이 있다면, QLDB에는 FROM INSERT / FROM REMOVE / FROM SET 절이 있다는..

AWS QLDB 2023.06.30

[QLDB] 1. AWS QLDB 개요

AWS QLDB (Quantum Ledger Database) AWS에서 개발한 중앙 관리형 원장(Ledger) 데이터베이스입니다. 여기서 원장이란, 은행에서 거래 내역을 적은 장부를 뜻하는 단어에서 파생된 용어로, Application에서 발생한 데이터 변경 사항을 기록한 것입니다. 기존 DBMS에서는 Audit 기능을 이용하여 데이터의 변경 사항을 기록할 수 있지만, 관리자에 의해 기록이 변경될 가능성(Not Immutable)이 있다는 단점이 있었습니다. 위 단점에 대한 대안으로 블록체인 프레임워크를 도입할 수도 있으나, 탈중앙적(Decentralized) 구조로 인해 복잡성이 증가하고 불필요한 비용이 발생한다는 또 다른 단점이 발생합니다. 이 두가지 방식의 절충안으로 탄생안 DBMS가 Amazon..

AWS QLDB 2023.06.30

[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