옵티마이저 5

MySQL /MariaDB 통계 정보

MySQL /MariaDB 통계 정보 · Version : MySQL 5.7, MariaDB 10.0 비용기반 최적화에서 가장 중요한것은 통계 정보이다. 통계 정보가 정확하지 않다면, 옵티마이저는 엉뚱한 실행계획을 생성하기 때문이다. MySQL, MariaDB의 통계 정보 또한 일반 다른 RDBMS와 같이 비용기반 옵티마이저를 사용하지만 아직 상용 RDBMS에 비해서는 다양하지 않다. MariaDB 10.0은 MySQL 5.6의 기능을 포함하고 있기 때문에 MySQL 5.6 과 매우 유사하다. MySQL 5.6 부터는 InnoDB 스토리지 엔진을 사용하는 테이블에 대한 통계 정보를 영구적(Persistent)으로 관리할 수 있다. MySQL 5.5 버전 까지는 show index from 으로 인덱스 칼..

MySQL, MariaDB 2019.09.12

SQL Server 복잡한 쿼리가 옵티마이저에 미치는 영향과 옵티마이저 timeout

SQL Server 복잡한 쿼리가 옵티마이저에 미치는 영향과 옵티마이저 timeout · Version : SQL Server SQL Server는 비용 기반(cost-based) 쿼리 최적화 프로그램을 사용한다. 따라서 여러 쿼리 계획을 작성하고 검사한 후 비용이 가장 낮은 쿼리 계획을 선택한다. SQL Server 쿼리 최적화 프로그램(QO)의 목적중 하나는 쿼리 실행과 비교하여 쿼리 최적화에 “합리적인 시간”을 소비하는 것이다. 따라서 QO에는 최적화 프로세스를 중지하기 전에 고려해야 할 태스크 임계값이 내장되어 있다. QO가 모든 계획은 아니지만 가능한 대부분의 계획을 고려하기 전에 임계값에 도달하면 Optimizer Timeout 한계에 도달한다. 이벤트 로그에는 “Reason For Early..

통계정보와 실제 데이터 분포 확인하기

통계정보와 실제 데이터 분포 확인하기 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 통계(Statistics)는 검색 조건이 주어질 때 해당 컬럼으로 구성되는 인덱스를 사용할지 여부를 옵티마이저가 판단의 근거로 활용되는 자료이다. 통계는 데이터가 있는 컬럼에 대해 인덱스가 만들어질 때 이 컬럼 값의 히스토그램 및 관련정보를 이용하여 만들어진다. 통계 : http://sqlmvp.kr/140165557766 통계의 경우 데이터가 변경됨에 따라 그 정보도 업데이트되는데 일정 비율이상 데이터가 변경될 업데이트 된다. 간혹 특정 시점에서 쿼리가 느린 경우가 발생하는데 통계정보와 실제 데이터의 분포가 다를 경우 옵티마이저가 잘못된 판단을 하여 최적화된 플랜..

SQL Server 2016 라이브 쿼리 통계

SQL Server 2016 라이브 쿼리 통계 Version : SQL Server 2016 SQL Server 2016 이전까지는 쿼리에 대한 실행 계획, 통계 정보 등이 쿼리가 완료된 후에 확인 할 수 있었다. SQL Server 2016부터 도입된 라이브쿼리 통계는 쿼리가 실행 되는 동안의 실행 계획 및 처리 행수, 실행 통계 등을 확인할 수 있다. 라이브 쿼리 통계는 SSMS에서 상단 메뉴 [쿼리] 또는 [빠른 실행아이콘]에서 [활성 쿼리 통계 포함]을 선택하여 활성화 할 수 있다. 라이브 쿼리 통계를 활성화 후 쿼리를 실행하면 별도의 탭에 실행계획의 흐름이 점선으로 표시 된다. 각 운영자는 실행 단계에서 얼마나 많은 작업이 수행되고 있는지 알 수 있다. 실행 계획에서 마우스 오른쪽을 클릭하여 나..

Collation 변경

Collation 변경 Version : SQL Server 2005, 2008, 2008R2, 2012, 2014 SQL Server를 설치할 기본 데이터 정렬 구성은 Windows Server의 데이터 정렬을 참고 한다. 사용자 설정에 따라 기본 데이터 정렬을 변경 할 수도 있다. SQL Server 2014 설치 : http://sqlmvp.kr/140211418959 데이터베이스의 기본 데이터 정렬 설정에 따라 테이블을 생성할 때 문자열 타입의 경우 기본적으로 데이터베이스의 기본 데이터 정렬을 참고하여 생성된다. 이번 포스트는 테이블 컬럼에 Korean_Wansung_CI_AS 정렬에서 SQL_Latin1_General_CP1_CI_AS 정렬로 변경하는 방법에 대해서 알아 본다. 실습을 위해 문자..