이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.토토 사이트 추천 _버전 또는 위에 나열된 다른 지원 버전 중 하나를 선택하세요.

14.2. 플래너가 사용하는 젠 토토

14.2.1. 단일 열 젠 토토

이전 섹션에서 보았듯이 쿼리 계획을 올바르게 선택하려면 쿼리 플래너가 쿼리에 의해 검색된 행 수를 추정해야 합니다. 이 섹션에서는 시스템이 이러한 추정에 사용하는 통계를 간략하게 살펴봅니다.

통계의 한 구성요소는 각 테이블과 인덱스의 총 항목 수뿐 아니라 각 테이블과 인덱스가 차지하는 디스크 블록의 수입니다. 이 정보는 테이블에 보관됩니다.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행)

여기서 우리는 그것을 볼 수 있습니다tenk1인덱스와 마찬가지로 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그리고 추정치를 계산하는 데 약간의 시간이 더 걸립니다. 반대로, 단순한 데이터 분포를 갖는 열의 경우 하한이 충분할 수 있습니다.

계획자의 통계 사용에 대한 자세한 내용은 다음에서 확인할 수 있습니다.스포츠 토토 사이트 : 문서 : 10 : 69. 플래너가 통계를 사용하는 방법.

14.2.2. 확장된 젠 토토

쿼리 절에 사용된 여러 열이 상호 연관되어 있기 때문에 잘못된 실행 계획을 실행하는 느린 쿼리를 보는 것이 일반적입니다. 플래너는 일반적으로 여러 조건이 서로 독립적이라고 가정합니다. 이는 열 값이 상관될 때 유지되지 않는 가정입니다. 일반 통계는 개별 열별 특성으로 인해 열 간 상관 관계에 대한 정보를 포착할 수 없습니다. 하지만,포스트그레SQL계산 능력이 있습니다다변량 젠 토토, 이러한 정보를 캡처할 수 있습니다.

가능한 열 조합 수가 매우 많기 때문에 다변량 젠 토토를 자동으로 계산하는 것은 비현실적입니다. 대신에,확장 젠 토토 개체, 더 자주 just라고 불림젠 토토 개체, 흥미로운 열 집합에 대한 젠 토토를 얻도록 서버에 지시하기 위해 생성될 수 있습니다.

젠 토토 개체는 다음을 사용하여 생성됩니다.젠 토토 작성명령. 그러한 객체를 생성하면 단지 통계에 대한 관심을 표현하는 카탈로그 항목이 생성됩니다. 실제 데이터 수집은 다음과 같이 수행됩니다.분석(수동 명령 또는 백그라운드 자동 분석). 수집된 값은 다음에서 확인할 수 있습니다.pg_statistic_ext카탈로그.

분석일반 단일 열 통계를 계산하는 데 사용되는 것과 동일한 테이블 행 샘플을 기반으로 확장 통계를 계산합니다. 테이블이나 해당 열에 대한 통계 목표를 늘리면(이전 섹션에서 설명한 대로) 샘플 크기가 늘어나므로 통계 목표가 클수록 일반적으로 더 정확한 확장 통계가 생성되고 이를 계산하는 데 더 많은 시간이 소요됩니다.

다음 하위 섹션에서는 현재 지원되는 확장 통계의 종류를 설명합니다.

14.2.2.1. 기능적 종속성

가장 간단한 종류의 확장 젠 토토 트랙기능적 종속성, 데이터베이스 정규형 정의에 사용되는 개념입니다. 우리는 그 칼럼을 말합니다b기능적으로 열에 종속됩니다.a가치에 대한 지식이 있는 경우a값을 결정하기에 충분합니다.b, 즉, 동일한 값을 갖는 두 개의 행이 없습니다.a그러나 다른 값b. 완전히 정규화된 데이터베이스에서 기능적 종속성은 기본 키와 수퍼키에만 존재해야 합니다. 그러나 실제로는 여러 가지 이유로 인해 많은 데이터 세트가 완전히 정규화되지 않습니다. 성능상의 이유로 의도적인 비정규화가 일반적인 예입니다. 완전히 정규화된 데이터베이스에서도 일부 열 간에 부분 상관 관계가 있을 수 있으며 이는 부분 기능 종속성으로 표현될 수 있습니다.

기능적 종속성의 존재는 특정 쿼리의 추정 ​​정확도에 직접적인 영향을 미칩니다. 쿼리에 독립 열과 종속 열 모두에 대한 조건이 포함된 경우 종속 열의 조건은 결과 크기를 더 이상 줄이지 않습니다. 그러나 기능 종속성에 대한 지식이 없으면 쿼리 플래너는 조건이 독립적이라고 가정하여 결과 크기를 과소평가하게 됩니다.

기획자에게 기능적 종속성을 알리기 위해,분석교차 열 종속성에 대한 측정값을 수집할 수 있습니다. 모든 열 집합 간의 종속성 정도를 평가하는 것은 엄청나게 비용이 많이 들기 때문에 데이터 수집은 다음으로 정의된 젠 토토 개체에 함께 나타나는 열 그룹으로 제한됩니다.종속성옵션. 생성하는 것이 좋습니다.종속성두 항목 모두에서 불필요한 오버헤드를 피하기 위해 강하게 상관된 열 그룹에 대해서만 젠 토토분석이후 쿼리 계획.

다음은 기능 종속성 통계 수집의 예입니다.

우편번호에서 우편번호, 도시에 대한 통계 stts(종속성) 생성;

우편번호를 분석하세요.

SELECT stxname, stxkeys, stx종속성
  pg_statistic_ext에서
  어디서 stxname = 'stts';
 stx이름 | sxkeys |             stx종속성               
-------+---------+-------------------------------
 stts | 1 5 | "1 = 5": 1.000000, "5 = 1": 0.423130

여기서 열 1(우편번호)이 열 5(도시)를 완전히 결정하므로 계수는 1.0인 반면, 도시는 약 42%의 경우에만 우편번호를 결정한다는 것을 알 수 있습니다. 즉, 단일 우편번호 이상으로 표시되는 많은 도시(58%)가 있음을 의미합니다.

기능적으로 종속된 열과 관련된 쿼리에 대한 선택성을 계산할 때 플래너는 과소평가가 발생하지 않도록 종속성 계수를 사용하여 조건별 선택성 추정치를 조정합니다.

14.2.2.1.1. 기능적 종속성의 한계

함수 종속성은 현재 열을 상수 값과 비교하는 단순 동등 조건을 고려할 때만 적용됩니다. 두 열을 비교하거나 열을 표현식과 비교하거나 범위 절에 대한 등식 조건에 대한 추정을 향상시키는 데 사용되지 않습니다.좋아요또는 다른 유형의 조건.

기능 종속성을 추정할 때 플래너는 관련 열의 조건이 호환 가능하므로 중복된다고 가정합니다. 호환되지 않는 경우 올바른 추정치는 행이 0이 되지만 그 가능성은 고려되지 않습니다. 예를 들어, 다음과 같은 쿼리가 주어지면

SELECT * FROM 우편번호 WHERE 도시 = '샌프란시스코' AND 우편번호 = '94105';

기획자는 다음을 무시할 것입니다.도시절은 선택성을 변경하지 않는다는 뜻입니다. 맞습니다. 그러나 다음과 같은 가정을 할 것입니다.

SELECT * FROM 우편번호 WHERE 도시 = '샌프란시스코' AND 우편번호 = '90210';

실제로는 이 쿼리를 만족하는 행이 0개일지라도. 그러나 기능적 종속성 통계는 결론을 내릴 만큼 충분한 정보를 제공하지 않습니다.

많은 실제 상황에서 이 가정은 대개 만족됩니다. 예를 들어, 쿼리에 사용할 호환 가능한 도시 및 우편 번호 값만 선택할 수 있는 GUI가 애플리케이션에 있을 수 있습니다. 그러나 그렇지 않은 경우 기능적 종속성은 실행 가능한 옵션이 아닐 수 있습니다.

14.2.2.2. 다변량 N-고유 개수

단일 열 젠 토토는 각 열의 고유 값 수를 저장합니다. 둘 이상의 열을 결합할 때 고유 값의 추정치(예:그룹별 a, b)은 플래너에 단일 열 젠 토토 데이터만 있는 경우 잘못된 계획을 선택하는 원인이 되는 경우가 많습니다.

그러한 추정치를 개선하려면,분석열 그룹에 대해 n개의 고유한 통계를 수집할 수 있습니다. 이전과 마찬가지로 가능한 모든 열 그룹화에 대해 이 작업을 수행하는 것은 비실용적이므로 데이터는 다음으로 정의된 젠 토토 개체에 함께 나타나는 열 그룹에 대해서만 수집됩니다.특이함옵션. 나열된 열 집합에서 두 개 이상의 열의 가능한 각 조합에 대해 데이터가 수집됩니다.

이전 예를 계속하면 우편번호 테이블의 n-고유 개수는 다음과 같을 수 있습니다:

CREATE STATISTICS stts2 (ndistinct) 우편번호에서 우편번호, 주, 도시 ON;

우편번호를 분석하세요.

SELECT stxkeys AS k, stxndistinct AS nd
  pg_statistic_ext에서
  어디서 stxname = 'stts2';
-[ 기록 1 ]--------------------------------------------
케이 | 1 2 5
둘째 | "1, 2": 33178, "1, 5": 33178, "2, 5": 27435, "1, 2, 5": 33178

이는 33178개의 고유한 값을 갖는 세 가지 열 조합이 있음을 나타냅니다: 우편번호 및 주; 우편번호 및 도시 및 우편번호, 도시 및 주(이 표에서 우편번호만 고유하다는 점을 고려하면 모두 동일하다는 사실이 예상됩니다). 반면에 도시와 주를 조합한 경우 고유 값은 27435개에 불과합니다.

생성하는 것이 좋습니다특이함실제로 그룹화에 사용되고 그룹 수를 잘못 추정하여 잘못된 계획을 초래하는 열 조합에 대해서만 젠 토토 개체가 생성됩니다. 그렇지 않으면,분석주기가 낭비되었습니다.