분류 전체보기 1385

Azure SQL Managed Instance 및 SQL Server 2016 Later에서 대기 통계 분석

Azure SQL Managed Instance 및 SQL Server 2016 Later에서 대기 통계 분석 · Version : Azure SQL, SQL Server 2016 Later 대기 통계(Wait Statistics)는데이터베이스 엔진에서 무언가를 기다리는 쿼리를 식별하는데 도움이 되며 쿼리 지속시간이 긴 이유를 분석할 수 있는 정보를 나타낸다. 이번 포스트에서는 워크로드가 대기하는 이유와 일부 리소스에서 대기중인 쿼리를 식별하는 방법에 대해서 살펴본다. Azure SQL Managed Instance를 사용하면 아래 DMV를 사용하여 쿼리가 리소스를 대기하는 이유를 찾을 수 있다. · sys.dm_os_wait_stats : 인스턴스 레벨에서 대기 정보 반환 · sys.query_stor..

MySQL/MariaDB Single-pass, Two-pass Sort Algorithm

MySQL/MariaDB Single-pass, Two-pass Sort Algorithm · Version : MySQL 5.X Later, MariaDB 5.X Later MySQL/MariaDB에서는 정렬 알고리즘으로Single-pass 와 Two-pass 알고리즘을 사용한다. 그리고 정렬처리 방식으로 인덱스를 사용한 방식과 테이블을 사용하여 정렬하는 방식이 있다. Single-pass 알고리즘은 Sort Buffer에 정렬 기준 칼럼을 포함한 SELECT에 포함된 컬럼의 데이터를 버퍼 메모리에 담아서 정렬을 수행하는 방식이다. Two-pass 알고리즘은 정렬 컬럼과 프라이머리 키 값만 Sort buffer에 담아서 정렬을 수행하고, 정렬된 순서대로 다시 프라이머리키로 테이블을 읽어서 SELECT ..

MySQL, MariaDB 2019.09.21

SQL Server 2019에서 동기 통계 업데이트시 발생하는 쿼리 Blocking 확인

SQL Server 2019에서 동기 통계 업데이트시 발생하는 쿼리 Blocking 확인 · Version : SQL Server 2019 SQL Server에서 통계정보는 옵티마이저가 실행 계획을 생성할 때 참고하는 중요한 지표이다. 통계 자동 업데이트가 true 로 설정된 경우, 데이터의 변경이 특정 임계치 이상되면 자동으로 통계 정보를 업데이트 한다. · SQL Server Statistics : http://sqlmvp.kr/140165557766 이때 통계 정보를 업데이트하면서 블럭킹이 발생하는데 이전까지는 블럭킹이 발생한것에 대해서 확인할 방법이 없었다. SQL Server 2019 부터는 이러한 문제를 해결하기 위해 새로운 진단 데이터가 도입되었다. 통계 업데이트시 블럭킹을 발생하는 것을 재..

MySQL/MariaDB Sort Buffer

MySQL/MariaDB Sort Buffer · Version : MySQL, MariaDB MySQL/MariaDB에서는 데이터를 정렬(ORBER BY)하기 위해 별도의 메모리 공간을 할당하는데 이때 사용되는 메모리가 Sort buffer이다. 이 메모리는 정렬이 필요할 경우에만 할당되며, 쿼리 실행이 완료되면 시스템으로 즉시 반납된다. Soft buffer의 크기는 시스템 설정 변수인 sort_buffer_size로 조정 할 수 있다. sort_buffer_size는 byte단위로 표시된다. show variables where Variable_Name like '%sort_buffer%'; 정렬해야하는 데이터의 크기가 작은 경우에는 Sort buffer 만으로 충분할 수도 있지만, 정렬해야하는 데..

MySQL, MariaDB 2019.09.20

SQL Server 2019 Log Writer Workers

SQL Server 2019 Log Writer Workers · Version : SQL Server 2014, SQL Server 2016, SQL Server 2017, SQL Server 2019 SQL Server 2017은 숨겨진 스케줄러에서 최대 4개의 Log Writer Worker를 활용하여 트랜잭션 로그 처리 활동을 지원한다. SQL Server 2019 버전부터는 하드웨어 성능에 따라 최대 Log Writer Worker 수가 최대 8개까지 증가한다. ;with kgroups AS (SELECT kgroup_count = COUNT(DISTINCT processor_group) FROM sys.dm_os_nodes osn) SELECT SQLServer_version = SERVERP..

MySQL/MariaDB Full Table Scan

MySQL/MariaDB Full Table Scan · Version : MySQL, MariaDB Full Table Scan은 인덱스를 사용하지 않고 테이블 데이터를 처음부터 끝까지 읽어서 요청 작업을 처리하는것을 의미한다. MySQL 및 MariaDB에서는 아래와 같은 조건일때, Full Table Scan을 사용한다. · 테이블의 레코드 건수가 적어서 인덱스를 통해 읽는것보다 직접 테이블을 읽는것이 더 빠르다고 판된될때 (일반적으로 매우 적은페이지( 1페이지)일때) · WHERE절이나 ON절에 사용할 수 있는 인덱스가 없을 경우 · 인덱스 레인지스캔을 사용할 수 있는 쿼리라 하더라도 옵티마이저가 판단한 조건 일치 레코드 건수가 너무 많은 경우 테이블 전체를 읽는 작업은 많은 디스크 읽기 오버헤드..

MySQL, MariaDB 2019.09.19

SQL Server Login Timeout 디버깅

SQL Server Login Timeout 디버깅 · Version : SQL Server, SQL Server Linux SQL Server 2017 및 SQL Linux에서 로그인시 랜덤하게 연결이 실패하는 경우가있다. 이번 포스트는 SQL Server Login 시 Timeout이 발생하는 원인을 분석하기 위한 디버깅 과정을 소개한다. [Report Symptoms] · SQL 인증 및 AD 기반 로그인 모두에서 무작위 연결 실패 · 서버의 원격 클라이언트 또는 sqlcmd 실행시 디렉토리(/opt/mssql-tools/bin)에서 오류가 발생 · 장애 발생시 예측 할 수 없음 · Non-yielding 스케줄러 보고서 · SQL Server 2017 CU10에 동작이 표시되지 않음 · SQL S..

MariaDB 히스토그램 (옵티마이저가 실행계획 생성시 참고하는 데이터 분포 정보)

MariaDB 히스토그램 (옵티마이저가 실행계획 생성시 참고하는 데이터 분포 정보) · Version : MariaDB 10.0 히스토그램은 테이블의 컬럼값의 분포를 분석할 수 있는 통계 정보이다. 히스토그램 정보가 없는 경우에는 하나의 컬럼에서 유니크한 값의 개수에 기반해서 대략적인 분포도를 예측하는 형태로 실행 계획의 비용이 계산되었다. 이 또한 인덱스가 생성된 컬럼에 대해서만 유니크한 개수가 관리되었다. 이처럼 히스토그램이 관리되지 않으면 컬럼에 대한 데이터 분포를 잘 못 예측하여 옵티마이저가 잘못된 실행 계획을 생성할 수도 있다. 히스토그램 기반 통계는 옵티마이저가 선택한 쿼리 계획을 개선하기 위한 메커니즘으로 MariaDB 10.0 버전에서 도입되었다. 이전까지는 실행계획을 생성할 때 인덱싱 되..

MySQL, MariaDB 2019.09.18

SQL Server Worker Thread 기본 계산

SQL Server Worker Thread 기본 계산 · Version : SQL Server SQL Server 2017부터는 소규모 환경을 고려하여 SQL Server의 기본 worker thread 수가 약간 변경되었다. 소규모 환경에서 SQL Server를 실행하는 경우 SQL Server는 worker thread를 줄인다. X64 설치의 경우 sp_configure ‘max worker threads’ 값을 0으로 설정하면 SQL Server는 아래 계산 공식을 사용한다. Default 512 Small Environment 256 소규모 환경에서는 SQL Server는 항상 worker thread 256을 사용한다. 더 큰 환경에서 실행하면 worker thread는 512가 기본값이며 ..

SQL Linux의 fsync 및 버퍼된 IO (버퍼된 쓰기중 오류가 발생하였을때 파일은 유효할까?)

SQL Linux의 fsync 및 버퍼된 IO (버퍼된 쓰기중 오류가 발생하였을때 파일은 유효할까?) · Version : SQL Server Linux PostgreSQL에서 fsync() 오류처리는 안전하지 않으며 XFS에서 데이터 손실이 발생할 수 있다는 내용이 있다. · PostgreSQL's handling of fsync() errors is unsafe and risks data loss at least on XFS : https://www.postgresql.org/message-id/flat/CAMsr%2BYE5Gs9iPqw2mQ6OHt1aC5Qk5EuBFCyG%2BvzHun1EqMxyQg%40mail.gmail.com#CAMsr+YE5Gs9iPqw2mQ6OHt1aC5Qk5EuBFCyG+..