이전 섹션에서 보았듯이 쿼리 계획을 올바르게 선택하려면 쿼리 플래너가 쿼리에 의해 검색된 행 수를 추정해야 합니다. 이 섹션에서는 시스템이 이러한 추정에 사용하는 통계를 간략하게 살펴봅니다.
통계의 한 구성요소는 각 테이블과 인덱스의 총 항목 수뿐 아니라 각 테이블과 인덱스가 차지하는 디스크 블록의 수입니다. 이 정보는 테이블에 보관됩니다.pg_class, 열에서reltuples그리고relpages. 다음과 유사한 쿼리로 이를 살펴볼 수 있습니다.
SELECT relname, relkind, reltules, relpages
pg_class에서
relname LIKE 'tenk1%';
이름 | 친척 | 렐튜플스 | 다시 페이지
---------+---------+------------+----------
텐크1 | r | 10000 | 358
tenk1_hundred | 나 | 10000 | 30
tenk1_thous_tenthous | 나 | 10000 | 30
tenk1_unique1 | 나 | 10000 | 30
tenk1_unique2 | 나 | 10000 | 30
(5행)
여기서 우리는 그것을 볼 수 있습니다텐크1인덱스와 마찬가지로 10000개의 행을 포함하지만 인덱스는 (놀랍지도 않게) 테이블보다 훨씬 작습니다.
효율성상의 이유로,reltuples그리고relpages즉시 업데이트되지 않으므로 일반적으로 다소 오래된 값이 포함되어 있습니다. 다음으로 업데이트됩니다.진공, 분석및 다음과 같은 몇 가지 DDL 명령색인 생성. 에이진공또는분석전체 테이블을 스캔하지 않는 작업(일반적인 경우)은 점진적으로 업데이트됩니다.reltuples스캔한 테이블 부분을 기준으로 계산하여 대략적인 값을 구합니다. 어쨌든 플래너는 찾은 값을 확장합니다.pg_class현재의 물리적 테이블 크기와 일치하여 더 가까운 근사치를 얻습니다.
대부분의 쿼리는 다음으로 인해 테이블 행의 일부만 검색합니다.어디에서검사할 행을 제한하는 절. 따라서 기획자는 다음을 추정해야 합니다.선택성의어디절, 즉의 각 조건과 일치하는 행의 비율입니다.어디절. 이 작업에 사용되는 정보는pg_statistic시스템 카탈로그. 의 항목pg_statistic다음에 의해 업데이트됩니다.분석그리고진공 분석명령이며 새로 업데이트된 경우에도 항상 근사치입니다.
보기보다는pg_statistic직접적으로 그 모습을 보는 것이 더 좋습니다pg_stats스포츠 토토 베트맨를 수동으로 조사할 때.pg_stats더 쉽게 읽을 수 있도록 설계되었습니다. 뿐만 아니라,pg_stats모두가 읽을 수 있는 반면pg_statistic수퍼유저만 읽을 수 있습니다. (이렇게 하면 권한이 없는 사용자가 스포츠 토토 베트맨를 통해 다른 사람의 테이블 내용에 대해 알 수 없습니다.pg_stats보기는 현재 사용자가 읽을 수 있는 테이블에 대한 행만 표시하도록 제한됩니다.) 예를 들어 다음을 수행할 수 있습니다.
SELECT attname, 상속됨, n_distinct,
array_to_string(most_common_vals, E'\n') as Most_common_vals
pg_stats에서
WHERE 테이블 이름 = '도로';
이름 | 상속 | n_distinct | 가장_공통_발
---------+------------+------------+----------
이름 | 에프 | -0.363388 | I- 580 램프+
| | | I- 880 램프+
| | | Sp 철도 +
| | | 나- 580 +
| | | I- 680 램프
이름 | 티 | -0.284859 | I- 880 램프+
| | | I- 580 램프+
| | | I- 680 램프+
| | | 나- 580 +
| | | State Hwy 13 램프
(2행)
동일한 열에 대해 두 개의 행이 표시된다는 점에 유의하십시오. 하나는 다음에서 시작하는 완전한 상속 계층 구조에 해당합니다.도로테이블 (상속됨=t) 및만 포함하는 또 다른 하나도로테이블 자체(상속됨=f).
저장된 정보의 양pg_statistic작성자:분석, 특히의 최대 항목 수most_common_vals그리고히스토그램_바운드각 열에 대한 배열은 다음을 사용하여 열별로 설정할 수 있습니다.테이블 세트 스포츠 토토 베트맨 변경명령 또는 설정을 통해 전역적으로default_statistics_target구성 변수. 현재 기본 제한은 100개 항목입니다. 한도를 높이면 더 많은 공간을 소비하는 대신 불규칙한 데이터 분포가 있는 열의 경우 더욱 정확한 플래너 추정이 가능해집니다.pg_statistic그리고 추정치를 계산하는 데 약간의 시간이 더 걸립니다. 반대로, 단순한 데이터 분포를 갖는 열의 경우 하한이 충분할 수 있습니다.
플래너의 통계 사용에 대한 자세한 내용은 다음에서 확인할 수 있습니다.스포츠 토토 사이트 : 문서 : 16 : 76 장. 플래너가 통계를 사용하는 방법.
쿼리 절에 사용된 여러 열이 상호 연관되어 있기 때문에 잘못된 실행 계획을 실행하는 느린 쿼리를 보는 것이 일반적입니다. 플래너는 일반적으로 여러 조건이 서로 독립적이라고 가정합니다. 이는 열 값이 상관될 때 유지되지 않는 가정입니다. 일반 통계는 개별 열별 특성으로 인해 열 간 상관 관계에 대한 정보를 포착할 수 없습니다. 하지만,PostgreSQL계산 능력이 있습니다다변량 스포츠 토토 베트맨, 이러한 정보를 캡처할 수 있습니다.
가능한 열 조합의 수가 매우 많기 때문에 다변량 스포츠 토토 베트맨를 자동으로 계산하는 것은 비현실적입니다. 대신에,확장 스포츠 토토 베트맨 개체, 더 자주 just라고 불림스포츠 토토 베트맨 개체, 흥미로운 열 집합에 대한 스포츠 토토 베트맨를 얻도록 서버에 지시하기 위해 생성될 수 있습니다.
스포츠 토토 베트맨 개체는 다음을 사용하여 생성됩니다.스포츠 토토 베트맨 작성명령. 그러한 객체를 생성하면 단지 통계에 대한 관심을 표현하는 카탈로그 항목이 생성됩니다. 실제 데이터 수집은 다음과 같이 수행됩니다.분석(수동 명령 또는 백그라운드 자동 분석). 수집된 값은 다음에서 확인할 수 있습니다.pg_statistic_ext_data카탈로그.
분석일반 단일 열 통계를 계산하는 데 사용되는 것과 동일한 테이블 행 샘플을 기반으로 확장 통계를 계산합니다. 테이블이나 해당 열에 대한 통계 목표를 늘리면(이전 섹션에서 설명한 대로) 샘플 크기가 늘어나므로 통계 목표가 클수록 일반적으로 더 정확한 확장 통계가 생성되고 이를 계산하는 데 더 많은 시간이 소요됩니다.
다음 하위 섹션에서는 현재 지원되는 확장 통계의 종류를 설명합니다.
가장 간단한 종류의 확장 스포츠 토토 베트맨 트랙기능적 종속성, 데이터베이스 정규형 정의에 사용되는 개념입니다. 우리는 그 칼럼을 말합니다b기능적으로 열에 종속됩니다.a가치에 대한 지식이 있는 경우a값을 결정하기에 충분합니다.b, 즉, 동일한 값을 갖는 두 개의 행이 없습니다.a그러나 다른 값b. 완전히 정규화된 데이터베이스에서 기능적 종속성은 기본 키와 수퍼키에만 존재해야 합니다. 그러나 실제로는 여러 가지 이유로 인해 많은 데이터 세트가 완전히 정규화되지 않습니다. 성능상의 이유로 의도적인 비정규화가 일반적인 예입니다. 완전히 정규화된 데이터베이스에서도 일부 열 간에 부분 상관 관계가 있을 수 있으며 이는 부분 기능 종속성으로 표현될 수 있습니다.
기능적 종속성의 존재는 특정 쿼리의 추정 정확도에 직접적인 영향을 미칩니다. 쿼리에 독립 열과 종속 열 모두에 대한 조건이 포함된 경우 종속 열의 조건은 결과 크기를 더 이상 줄이지 않습니다. 그러나 기능 종속성에 대한 지식이 없으면 쿼리 플래너는 조건이 독립적이라고 가정하여 결과 크기를 과소평가하게 됩니다.
기획자에게 기능적 종속성을 알리기 위해,분석교차 열 종속성에 대한 측정값을 수집할 수 있습니다. 모든 열 집합 간의 종속성 정도를 평가하는 것은 엄청나게 비용이 많이 들기 때문에 데이터 수집은 다음으로 정의된 스포츠 토토 베트맨 개체에 함께 나타나는 열 그룹으로 제한됩니다.종속성옵션. 생성하는 것이 좋습니다.종속성두 항목 모두에서 불필요한 오버헤드를 피하기 위해 강하게 상관된 열 그룹에 대해서만 스포츠 토토 베트맨분석이후 쿼리 계획.
다음은 기능 종속성 통계 수집의 예입니다.
CREATE STATISTICS stts (종속성) ON 도시, 우편번호 FROM 우편번호; 우편번호를 분석하세요. SELECT stxname, stxkeys, stxd종속성 pg_statistic_ext에서 pg_statistic_ext_data에 조인(oid = stxoid) 어디서 stxname = 'stts'; stx이름 | sxkeys | stxd종속성 -------+---------+------------------------------- stts | 1 5 | "1 = 5": 1.000000, "5 = 1": 0.423130
여기서 열 1(우편번호)이 열 5(도시)를 완전히 결정하므로 계수는 1.0인 반면, 도시는 약 42%의 경우에만 우편번호를 결정한다는 것을 알 수 있습니다. 즉, 단일 우편번호 이상으로 표시되는 많은 도시(58%)가 있음을 의미합니다.
기능적으로 종속된 열과 관련된 쿼리에 대한 선택성을 계산할 때 플래너는 과소평가가 발생하지 않도록 종속성 계수를 사용하여 조건별 선택성 추정치를 조정합니다.
함수 종속성은 현재 열을 상수 값과 비교하는 간단한 동등 조건을 고려할 때만 적용됩니다.IN상수 값이 있는 절. 두 열을 비교하거나 열을 표현식과 비교하거나 범위 절에 대한 등식 조건에 대한 추정을 향상시키는 데 사용되지 않습니다.좋아요또는 다른 유형의 조건.
기능적 종속성을 추정할 때 플래너는 관련 열의 조건이 호환 가능하므로 중복된다고 가정합니다. 호환되지 않는 경우 올바른 추정치는 행이 0이 되지만 그 가능성은 고려되지 않습니다. 예를 들어, 다음과 같은 쿼리가 주어지면
SELECT * FROM 우편번호 WHERE 도시 = '샌프란시스코' AND 우편번호 = '94105';
기획자는 다음을 무시할 것입니다.도시절은 선택성을 변경하지 않는다는 뜻입니다. 맞습니다. 그러나 에 대해서는 동일한 가정을 할 것입니다.
SELECT * FROM 우편번호 WHERE 도시 = '샌프란시스코' AND 우편번호 = '90210';
실제로는 이 쿼리를 만족하는 행이 0개일지라도. 그러나 기능적 종속성 통계는 결론을 내릴 만큼 충분한 정보를 제공하지 않습니다.
많은 실제 상황에서 이 가정은 일반적으로 만족됩니다. 예를 들어, 쿼리에 사용할 호환 가능한 도시 및 우편 번호 값만 선택할 수 있는 GUI가 애플리케이션에 있을 수 있습니다. 그러나 그렇지 않은 경우 기능적 종속성은 실행 가능한 옵션이 아닐 수 있습니다.
단일 열 스포츠 토토 베트맨는 각 열의 고유 값 수를 저장합니다. 둘 이상의 열을 결합할 때 고유 값의 추정치(예:그룹별 a, b)는 플래너에 단일 열 스포츠 토토 베트맨 데이터만 있는 경우 잘못된 계획을 선택하는 원인이 되는 경우가 많습니다.
이러한 추정치를 개선하려면,분석열 그룹에 대해 n개의 고유한 통계를 수집할 수 있습니다. 이전과 마찬가지로 가능한 모든 열 그룹화에 대해 이 작업을 수행하는 것은 비실용적이므로 데이터는 다음과 같이 정의된 스포츠 토토 베트맨 개체에 함께 나타나는 열 그룹에 대해서만 수집됩니다.특이함옵션. 나열된 열 집합에서 두 개 이상의 열의 가능한 각 조합에 대해 데이터가 수집됩니다.
이전 예를 계속하면 우편번호 테이블의 n-고유 개수는 다음과 같습니다.
CREATE STATISTICS stts2 (ndistinct) ON 시, 주, 우편번호 FROM 우편번호; 우편번호를 분석하세요. SELECT stxkeys AS k, stxdndistinct AS nd pg_statistic_ext에서 pg_statistic_ext_data에 조인(oid = stxoid) 어디서 stxname = 'stts2'; -[ 기록 1 ]---------------------------------------------- 케이 | 1 2 5 둘째 | "1, 2": 33178, "1, 5": 33178, "2, 5": 27435, "1, 2, 5": 33178
이는 33178개의 고유한 값을 갖는 세 가지 열 조합이 있음을 나타냅니다: 우편번호 및 주; 우편번호 및 도시 및 우편번호, 도시 및 주(이 표에서 우편번호만 고유하다는 점을 고려하면 모두 동일하다는 사실이 예상됩니다). 반면에 도시와 주를 조합한 경우 고유 값은 27435개에 불과합니다.
생성하는 것이 좋습니다특이함스포츠 토토 베트맨는 실제로 그룹화에 사용되는 열 조합에 대해서만 개체를 생성하며, 그룹 수를 잘못 추정하면 잘못된 계획이 발생합니다. 그렇지 않으면,분석주기가 낭비되었습니다.
각 열에 저장된 또 다른 유형의 스포츠 토토 베트맨는 가장 일반적인 값 목록입니다. 이를 통해 개별 열에 대해 매우 정확한 추정이 가능하지만 여러 열에 조건이 있는 쿼리의 경우 상당히 잘못된 추정이 발생할 수 있습니다.
그러한 추정치를 개선하려면,분석열 조합에 대한 MCV 목록을 수집할 수 있습니다. 함수적 종속성 및 n-고유 계수와 마찬가지로 가능한 모든 열 그룹화에 대해 이 작업을 수행하는 것은 비현실적입니다. 이 경우 MCV 목록(기능적 종속성 및 n-고유 계수와 달리)은 공통 열 값을 저장하므로 더욱 그렇습니다. 따라서 데이터는 다음과 같이 정의된 스포츠 토토 베트맨 개체에 함께 나타나는 열 그룹에 대해서만 수집됩니다.mcv옵션.
이전 예를 계속하면 우편번호 테이블의 MCV 목록은 다음과 같을 수 있습니다(간단한 통계 유형과 달리 MCV 내용을 검사하려면 함수가 필요합니다).
우편번호에서 도시, 주에 대한 통계 stts3 (mcv) 생성;
우편번호를 분석하세요.
m을 선택하세요.* pg_statistic_ext에서 pg_statistic_ext_data에 조인(oid = stxoid),
pg_mcv_list_items(stxdmcv) m WHERE stxname = 'stts3';
색인 | 가치 | 널 | 주파수 | 기본_주파수
--------+------------+-------+------------+---
0 | 워싱턴 DC | f,f | 0.003467 | 2.7e-05
1 | 아포, AE | f,f | 0.003067 | 1.9e-05
2 | 휴스턴, 텍사스 | f,f | 0.002167 | 0.000133
3 | 엘파소, 텍사스 | f,f | 0.002 | 0.000113
4 | 뉴욕, 뉴욕 | f,f | 0.001967 | 0.000114
5 | 조지아주 애틀랜타 | f,f | 0.001633 | 3.3e-05
6 | 캘리포니아주 새크라멘토 | f,f | 0.001433 | 7.8e-05
7 | 마이애미, 플로리다 | f,f | 0.0014 | 6e-05
8 | 텍사스주 달라스 | f,f | 0.001367 | 8.8e-05
9 | 일리노이주 시카고 | f,f | 0.001333 | 5.1e-05
...
(99행)
이는 도시와 주의 가장 일반적인 조합이 DC의 워싱턴이며 실제 빈도(샘플에서)가 약 0.35%임을 나타냅니다. 단순 열당 빈도로 계산된 조합의 기본 빈도는 0.0027%에 불과하므로 2배 정도 과소평가됩니다.
생성하는 것이 좋습니다MCV스포츠 토토 베트맨는 실제로 조건에서 함께 사용되는 열 조합에 대해서만 개체를 생성하며 그룹 수를 잘못 추정하면 잘못된 계획이 발생합니다. 그렇지 않으면,분석그리고 계획 주기는 낭비입니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.