Azure SQL Database: The intelligent self tuning data platform – BRK3162

대낮 밤이 어떻게 바뀌지, 지금까지 좋은가? 당신이 많은 재미있는 이야기를 듣기를 바랍니다

즐거운 시간을 보냈습니다 내일의 로이 한 스키마를 듣고 있습니다 그것은 일종의 지역입니다 내가 가진 조직 우리 둘 다 내 이름을 일하는 건 케빈 패리 야

저는 데이터 플랫폼 팀의 주임 프로그램 관리자입니다 속편에서는 Org이 약 14 년 동안 나왔습니다 그래서 많은 일들이 생겨나는 것을 보았습니다 저와 함께 나무 친칠라, 그녀는 쿼리 처리 팀의 개발자 중 하나입니다, 그래서 그녀가 여기 와서 그녀가 만든 물건에 대해 얘기가 정말 멋지 네요 SQL 엔진 내의 쿼리 프로세서 내에서보다 지능적이고 적응력이 뛰어난 몇 가지 기능을 살펴 보겠습니다

그래서 그것은 C와 자기 조정 조건에 반응 할 수 있습니다 적응 형 쿼리 처리에 대한 이야기로 시작할 수 있습니까? 이것은 일련의 기능입니다 SQL 2017로 가져 왔습니다 그리고 그들은 더 엄격하게 적응했습니다 그들은 그것이 아의 상황에 적응하지 않고했기 때문에 만약 그것이 잘못 평가 되었다면 잘못된 선택을하는 것이 적절할 것입니다

자체를 수정하십시오 따라서 사전 처리를 쿼리하면 좋은 성능을 얻는 효율적인 쿼리를 얻는 것이 카디널리티 추정과 관련이 있습니다 이것이 주어진 쿼리로부터 예측하는 예술 또는 과학입니다 각 테이블과 테이블에서 얼마나 많은 행이 흘러 나올 것인가 쿼리 계획 내의 각 분기를 통해 따라서 카디널리티 최적화 최적화 심장 동사 학자 유형을 수행하면 쿼리 계획의 각 단계에서 행 수를 추정합니다

이 통계 기법의 결합이며 가정이므로 다양한 값에 대한 히스토그램의 테이블과 관련된 통계가 있으므로 많은 행이 필요합니다 그 샘플링은 샘플링을 선택하는 방법에 따라 달라집니다 그리고 나서 가정들이 있습니다 그래서 처음에는 특정한 구성들입니다 정확히 얼마나 많은 행이 흐를 지에 대한 지식이 없습니다

그래서 우리는 그들 중 일부는 좋다고 가정하고, 그 중 일부는 좋지 않습니다 그리고이 작업의 일부입니다 가정의 일부가 실제로 유효하지 않은 부분을 수정합니다 견적이 정확할 때 우리는 운영 계획과 물리적 알고리즘에 대한 올바른 결정을 내림으로써 올바른 계획을 얻습니다 그리고 귀하의 데이터를 빨리 되 찾을 수 있습니다

그렇다면 잘못된 견적을 얻는 이유는 무엇입니까? 누락 된 통계가 누락되었습니다 통계적 히스토그램 자동으로 의학적으로 만들 수 있습니까? 아니면 설정 한 방법에 따라 수동으로 만들 수 있습니까? 연간 생성에서 설정하고 테이블에 대한 통계를 작성하지 않은 경우 기대할 행 수를 알 수 없습니다 그래서 우리는 100이나 1처럼 무언가를 얻을 것입니다 과

최적화를 최적화하려고하지 마십시오 그래도, 통계, 그래서 수동 통계를 사용하고 있다면 잠시 후에 테이블의 내용이 통계에 반영되지 않을 수 있습니다 또는 자동 통계를 사용하고 있고 최근에 테이블의 모양을 변경 한 작업을 수행 한 경우 대대적으로 큰 데이터로드를 수행하거나 여러 데이터를 정리하는 것과 같습니다 다시 말하지만, 통계는 테이블의 내용과 일치하지 않을 수 있습니다

그러나 통계가 쿼리를 최적화하기 위해 가고 싶어하며 아마도 잘못된 결정을 내릴 것이라고 믿습니다 통계를 다시 설정할 때 샘플 속도가 부적절합니다 그것은 값의 히스토그램입니다 그리고 당신은 얼마나 미세한 입자인지에 대한 제어권을 가지며 궁극적으로는 테이블을 완전히 스캔하고 모든 가능한 값을 샘플로 봅니다 그리고 과정은 당신이 그것을 얻을 수 있습니다

더 빠르면 오버 헤드도 줄어 듭니다 데이터에 스파이크가 누락 될 확률이 높아집니다 여기에서 여기를 측정하면 사이에 스파이크가 생겨서 놓칠 수 있습니다 그래서 이는 일종의 상충 관계이며 통계에 대한 샘플링 속도를 설정하는 방법을 알 수있는 방법입니다

아주 미세한 그레인 샘플링 속도에 관련되는 오버 헤드가 있습니다 그러나 그 다음에는 배포판에서 더 많은 예외를 잡을 것입니다 punnett 매개 변수 스니핑 문제에 대해 누가 들었습니까? 따라서 매개 변수 스니핑은 우리에게 두통의 종말을 일으키는 현상입니다 너가 가질 때 매개 변수에서 실행되는 쿼리

우리는 일반적으로 쿼리가 전달 된 모든 값을 기반으로 쿼리가 최적화된다는 것을 처음으로 알게 될 것입니다 다음 번에 그 쿼리를 볼 수 있습니다 쿼리 텍스트에는 해당 매개 변수의 변수 만 포함됩니다 쿼리 텍스트가 변경되지 않았으므로 값을 올리면 최적화되지 않습니다 그러나 값이 완전히 다를 수 있습니다

따라서 코리가 처음으로 사용 된 값이 매우 전형적이라면 남은 시간을 보게 될 것입니다 그렇다면 당신은 좋은 성적을 얻습니다 전체적으로 볼 때 하나 또는 두 개의 예외가 나타날 수 있지만 전반적인 성능은 상당히 좋아질 것입니다 처음으로 쿼리를 실행하면 발생합니다 당신은 평범한 가치관에서 벗어난 가치가 있습니다

그런 다음 최적화 작업을 통해 그 가치와 일반적인 경우가 달라질 수 있으므로 가질 수 있습니다 많은 문제가 실제로 그것의 데모를 조금 가지고 있습니다 모델 밖의 쿼리가 그렇게 구성됩니다 최적화 도구에는 놀랍도록 복잡한 코드가 있습니다 그 나에게 놀라움과 나는 잠시 동안 주변에 있었지만 다른 구조들에 대한 것이있다

우리는 그들이 어떻게 행동 할 것인지 가정합니다 그리고 우리는 단지 좋은 모델이 없기 때문에 추측을 할 수있는 몇 가지 구조가 있습니다 그들 중 일부는 비슷합니다 역사적으로 다중 문 테이블 값 함수의 경우 게스트가 하나였습니다 으니까 그 중 하나

몇 주 전에 나온 카디널리티 추정기가 새로운 쿼리 추정자를 위해 구성되었습니다 우리는 그 중 하나를 1200에서 바꿉니다 더 간단한 비트 더 유효합니다 그리고 데이터가 쿼리되는 것을 허용하지 않는 가정

당신이하고 있다면,이 독립과 상관 관계를 즐기는 것입니다 그래서 변수가 2 개인 경우 주 및 도시라고 말하십시오 우리는 그것들이 상관되어 있음을 압니다 그래서 당신은 주와 도시가 있다면

로스 앤젤레스라는 도시가 있다면 캘리포니아 주 권리가 될 가능성이 있습니다 거기에는 상관 관계가 있습니다 다른 값 변수는 모두 상관 관계가 없으며 쿼리 계획을 설정하는 방법과 관련이 있습니다 그래서 그 모든 것들 우리는 얼마나 많은 행이 그 조인에서 나올지에 대해 잘못 추측 할 것입니다

상관 관계가 있는지 아닌지에 따라 강해지므로 모든 일들이 문제를 일으킬 수 있습니다 사면 동질 추정 그리고 이것이 바로 이것이 될 것입니다 그래서 잘못된 쿼리의 캐스트가 쿼리 응답 시간이 느려 비효율적 인 작업을 수행합니다

우리는 계획을 올바르게 세우지 않았습니다 보유하지 않은 데이터에 맞게 최적화되었습니다 지나치게 많은 자원을 소비하므로 매우 큰 값을 위해 최적화하면 적은 양만 흘러갑니다 그런 다음 우리는 많은 양의 데이터를 지원할 수있는 데이터 구조를 설정할 것입니다 메모리 및 그런 다음 아주 작은 데이터 세트를 최적화하면 모든 메모리를 낭비하거나 역으로 낭비하게됩니다

그리고 작은 세트만으로 충분한 메모리를 확보하면 500 만 개의 행을 전달할 수 있습니다 그런 다음 모든 것을 현금화 할 수있는 충분한 공간이 없을 것이며 TV 및 기타 8 가지 시도를 할 것입니다 정말 천천히 그것이 디스크의 예입니다 주어진 쿼리에 대해 너무 많은 리소스를 확보하기 위해 처리량과 동시성을 줄였습니다

그것은 실행하려고하는 다른 모든 쿼리가 굶주릴 것입니다 후속 모델, 리팩토링 및 오프 모델은 모델 구조를 벗어나서 T SQL을 보았습니다 고문 Confort 확인은 특정 구성을 최적화하지 않기 때문에 사람들이 이러한 구성을 사용하여 작업 할 수 있다는 취지에서 효과가 있습니다 Corey를 실행시키고 실제로 더 빠를 것입니다 복잡한 코드가 없어도

그렇다면 우리가 일을 했어야 만했습니다 그리고 우리는 그 구조를 인식 할 것입니다 그래서 우리가 2017 년에 도입 한 기능 중 하나는 다량의 문 테이블 값 기능을위한 인터리빙 된 실행이었습니다 멀티 선택은 테이블 값 기능이 블랙 박스에 끌 렸음을 의미합니다 그들은 고정 카드와 최적화 손님을 하나로 제공합니다

복수 성명서가있는 경우 수율 함수 값으로 테이블을 만든 다음 해당 테이블을 쿼리에 사용합니다 우리는 그 테이블에 도달하는 데 필요한 것을 잘 알지 못하고 단지 하나만 얻습니다 그래서 2017 년에 우리가 그 패턴을 깨뜨린 것입니다

영원히 그리고 한국의 질의 처리 패턴은 당신이 질의를 보는 당신을 최적화 해 왔습니다 당신은 그것을 최적화하는 통계를 보았습니다 그리고 나서 당신은 실행합니다 다중 사이트 인터리브 실행을 통해 우리는 실제로 최적화와 실행을 인터리빙합니다 단계는 쿼리의 작은 모퉁이를 중심으로 정말 깨끗한 경계를 만드는 다중 문 테이블 값 함수입니다

그러면 그 시점까지 최적화 될 것입니다 테이블 값 함수에 대한 값을 얻을 때까지 실행됩니다 그리고 그 카드 유추를 사용하십시오이 유추는 실제 정확하고 나머지 쿼리에 대해 카디널리티 추정치를 사용합니다 그래서

다중 명령문 테이블 값 함수는 처음에는 정말 깨끗했습니다 태클을 시도하는 사례가 정말 잘 작동하므로 더 많은 다른 구조를 취할 수 있습니다 비슷한 방식으로 행동하십시오 쿼리 계획의 코너는 그 시점까지 최적화하거나 그 시점까지 실행 한 다음 나머지 쿼리를 다시 최적화합니다 모든 것에 관한 질문

정말 대화식이 될거야 질문하지 않는 한 도움이되는 마이크를 사용하는 경우 솔리드 스테이트 스토리지가 점점 빨라지고 있습니다 또는 메모리 액세스와 디스크 액세스 간의 경계가 줄어들고 있습니다

예를 들어 Tempe가 유출되었다고 언급하면 그래서 스토리지 클래스가 더 빨라지고 빨라지면서 실제로 SSD가 실제로 이국적입니다 비 휘발성 램 DIMM은 메모리와 마찬가지로 슬롯을 가지고 있지만 영구적이며 디스크처럼 액세스 할 수 있으므로 실제로는 정말 빠릅니다

여전히 전체 IO 스택을 거치면서 작성해야 할 sqlcode가 훨씬 많습니다 우리가 생각하는 것은 디스크이기 때문에 메모리에서 뭔가를 액세스하는 것보다 훨씬 많은 오버 헤드가 될 것입니다 그러나 당신은 그것이 점점 빨라지고 있다고 맞습니다 그러나 너희들은 더 힘들어하고있다

따라서 인터리빙 된 실행 후보는 select 문을 사용합니다 분명히 140 컴팩트 수준에 달려 있습니다 소모품을 가로 질러 그 곳곳에서 사용되지 않는 다중 문 TV는 들어 가지 않을 것입니다 그런 식으로하면 더 복잡해지기 때문입니다 계획을 사용하지 않을 때는 강제로 계획을 세우십시오

우리는 그것에 대해 아무 것도 할 수 없습니다 강제 매개 변수 zation을 사용하지 않습니다 과 사용 힌트를 사용하지 않고 스니핑 매개 변수를 사용하지 않습니다 권리

최적화를 수행하는 방법을 강요한다면 우리는 그것을 존중할 것이지만, 카이저는이를 고칠 것입니다 문제는 다른 방법으로 예상되는 오버 헤드는 최소로 다중 문 테이블 값 함수에서 이미 실현되었습니다 결과를 통해 축적 된 것을 기억합니다 우리가 그것을 실현하기 위해 테이블처럼 보이는 저장소

그래서 우리는 실제적으로 얼마나 많은 행이 우리에게 있었는지 확인하기 위해 구체화를보고 있습니다 현금은 첫 번째 실행 계획입니다 계획의 캐시가 현금화됩니다 후속 실행에 사용됩니다 따라서 매개 변수 스니핑 유형의 문제로 끝날 수 있습니다

실행 계획을 알고있는 계획 특성 그리고 interleaved는 식물에 우리의 새로운 속성을 실행합니다 우리는 실제로 우리가하려는이 일을하고 있다는 것을 알 수 있습니다 이러한 모든 새로운 기능과 동작은 항상 눈에 잘니다 또한 X 이벤트가 있으므로 Telemetry에서 X 이벤트를 사용하는 경우이를 모니터링 할 수 있습니다

X 이벤트에서 훌륭한 정보를 얻을 수 있습니다 그러나 우리는 또한 그들을 표면화하려고 노력하고 있습니다 계획 캐시와 같은 더 눈에 띄는 방식으로 그만큼 계획

문제 인터리브 된 실행 이벤트를 ex 이벤트의 일부로보십시오 나는 그렇게 생각하지만 나는 긍정적이지 않다 그렇습니다 훌륭한 세션을 시작하면 그렇게합니다

나는 그 이름이 무엇인지 모르겠다 그리고 당신은 인터리브 된 실행이 행복 할 때마다 볼 수 있어야하는 라이브 데이터를 보았습니다 그래서 그 모드 메모리 부여 피드백 다시 문제의 2017 기능입니다 우리가 모든 쿼리에 대해 우리는 일할 수있는 기억을 부여해야합니다 메모리의 스크래치 공간

우리가 우리가 필요로하는 기억의 양을 과대 평가하십시오 우리가 과소 평가하면 디스크에 쏟아져 끝날 것입니다 그리고 그 모두는 빈약 한 카디널리티 추정에 의해 좌우됩니다 우리는 그 일을 해결하기 위해 무엇을 했습니까? 일종의 카디널리티 문제를 피하고 있습니까? 왜냐하면 지금 당장 모든 경우에 해결하지 않을 것이기 때문입니다 그러나 우리가 한 일은 처음으로 메모리 부여 메커니즘에 피드백 루프를 도입하는 것입니다

쿼리를 실행할 때 주목할 것인가? 얼마나 많은 기억 쿼리가 궁극적으로 필요하고 델타가 충분히 큰 경우 메모리를 요청했습니다 의지 얼마나 많이 실제로 사용되었는지 기록하십시오

우리가 현금으로 지불하는 쿼리 계획에서 다음에 쿼리를 실행하면 새로운 밸브 메모리 부여 값이 사용됩니다 적응하고 몇 번 앞뒤로 조정하고 일반적으로 꽤 안정적인 상태로옵니다 배치 모드 그것도 안으로 있었다 SQL 2017은 일} 처리 모드는 일} 처리 모드 조회로 제한됩니다

또한 일괄 처리 모드에서는 적응 형 조인이있었습니다 따라서 우리가 물리적 알고리즘을 만드는 결정 중 하나는 당신이 가고 있는지 여부입니다 운영 해시 모드 또는 중첩 루프

그래서 그것들은 다른 점이 있습니다 각각의 점이 더 효율적입니다 때로는 잘못 이해합니다 적응 형 조인이하는 일은 크로스 오버 포인트가 빌드 측면으로 들어오는 행의 수와 관련하여 어느 정도의 경험적 방법을 설정한다는 것입니다

예 그래서 우리는 시작할 것입니다 임계 값을 초과하는 크로스 수가 해시에 합쳐지면 빌드 측에 대해 장미를 누적하십시오 임계 값을 초과하지 않으면 중첩 루프로 유지됩니다 실행 시간에 비행 중입니다

실행이 해시로 바뀔 때 동일한 쿼리에 대해 다른 실행을 중첩 루프로 결합 할 수 있습니다 그래서 고전적인 적응력 중 하나입니다 기술을 사용하여 그래서 그 모든 역사는 우리가 2017 년에 한 모든 것입니다 2019 년에 들어서 지금 말할 수 있습니다 우리는 범위를 넓히고 있습니다

그래서 2017 년에이 기능들은 주로 실행 중에 보았던 것에 적응하고 있습니다 우린 지금이야 2 개의 시나리오를 더 실행하고 잠시 동안 우리는 적응 형 QP라고 계속 부르고 있었고, 실제로 어떤 것에도 적응하지 못하기 때문에 간략하게 설명하기 시작했습니다 더 똑똑하게 만듭니다 이제 우리는 지능적인 QP를 갖게되었습니다

이것은 큰 그림과 같습니다 그래서 우리는 이것을 보면서 몇 분을 보낼 수 있습니다 이것은 우리가 보는 방식, 지능형 QP 및 그 밑에있는 기능입니다 그만큼 빛이 직면 한 부분은 SQL 2017에 상주 한 부분이므로 적응 형 QP가 있습니다

Jeff는 인터리브 된 실행 메모리 권한 부여 피드백을 결합합니다 그것들은 배치 모드에서만 둘 다 있습니다 그래서 모든 것들이 우리가 지금 막 이야기 한 것들입니다 오늘 우리가 SQL 20:19에 대해 발표하는 내용은 무엇입니까? 작업 서 메모리 권한 부여 피드백 interrow 모드입니까? 사람들은 우리가 가지고있는 지연된 컴파일을 가변합니다 OK 문 테이블 변수 변수 함수

에 대한 반복 실행 이제 우리는 테이블 변수에 대한 가치가있을 때까지 테이블 변수에 대한 컴파일을 연기합니다 로스트에서 일괄 처리 모드 또는 얼마나 많은 사람들이 일괄 처리 모드 조인을 사용했는지는 성능에 정말 만족합니다 좋아, 얼마나 많은 사람들이 당신이 쿼리에 열 저장소가 없다면 할 수 없어 좌절되었습니다

그래서 배치 모드는 실제로 효율적입니다 그것의 좋은 묘사로 들어갈 것인가? 그러나 지금까지는 쿼리 어딘가에 열 저장소가있는 경우에만 사용할 수있었습니다 2019 년에는 매장을 성장시킬 때 해당 모드를 사용할 수있게되었습니다 대략적인 QP

새로운 지역이 어디 있습니까? 거대한 Cardenal이있는 경우 그것은 쉽고 카운트 별 같은 집계를 수행하고 있습니다 그것은 우리가하고있는 첫 번째 것입니다 당신은 10,000,000,000 개의 행에서 뚜렷하게 구별됩니다 잠시 시간이 걸릴 것입니다

기억이 많이 걸릴거야 그래서 이것이하는 일은 시간의 매우 작은 소수에서 메모리의 작은 부분에 대한 대략적인 답을 얻습니다 네가 운전 중이라면 대시 보드 나 정확한 값이 반응하는 것만 큼 중요한 것은 아닙니다 이것은 정말 좋은 기능입니다

그래서 ro 모드에 대한 메모리 부여 피드백 SQL (2017)에서는 배치 모드 메모리 허가 피드백을 도입했습니다 원격 유출에 대한 현금 계획을 디스크로 업데이트했습니다 원격 과도한 메모리 부여 낭비 Pine Creek Sick Yusheng에 새로운 쿼리를 추가하면 메모리 부여 피드백의 상태를 이해할 수 있습니다

이것은 모두 150 컴팩트 수준 아래에 있습니다 그래서 우리는 당신이 장면 뒤에서 무엇을하는지 이해하도록 해줍니다 우리는 메모리 허가 피드백 루프가 비활성화 된 X 이벤트가 있습니다 그래서 우리가 메모리 교부금을 조정하고 있다면 그것은 앞뒤로왔다 갔다하며 앞뒤로 움직이며 수렴하지 않습니다

어쨌든 시간의 50 %가 잘못 될 것이라는 점은 없으므로 조정을 중단해야합니다 그 테이블 북 테이블 변수가 실제로 우리의 메모리 교부금에서 쫓겨나는 변수를 보여줍니다 그래서 그것에 대한 정보를 줄 것입니다 새로운 계획 속성 메모리 보조금 피드백이 조정 되었습니까? 이 계획에 대한 메모리 보조금

그리고 몇 가지 값이 있습니까? 그래서 정확한 보조금은 없습니다 그래서, 우리는 그것을하지 않았기 때문에 그것을 조정하지 않았습니다 첫 번째 실행은 우리가 기초가 될 수 없습니다 우리가 처음 본 것은 이번이 처음입니다 계획

당신이 굉장한 숙녀이기 때문에 어떠한 피드백도 사용할 수 없습니다 그리고 나서 네 우리는 거기에있을 수 있습니다 그래서 우리는 그것을 조정했고 우리는 여전히 조정 중입니다 그리고 그렇습니다, 안정적이어서 우리는 더 이상 움직이지 않는 것처럼 보이는 안정된 상태에 도달했습니다

그래서 우리는 단지 것입니다 좋은 전화 그리고 우리는 또한 마지막으로 기억을 요구합니다 문제는 지구본에 반영된 참조가 어떻게 연기 되었는가에 관한 것입니다 우리는 없다? 테이블 테이블 변수가 다른 컴파일을 보여주기위한 공물은 사실 조금 어리니까요

예를 들어, 메모리에 대한 요금으로도 의견을 듣고 싶습니다 일괄 처리 모드에 대한 John의 의견 우리는 방금했습니다 X 이벤트와 고객의 관계는 더 직관적 인 방식으로이를보고 쇼핑 라인 속성을 얻습니다 곧 출시 예정인 것 같습니다

우리는 무언가를 추가 할 수는 있지만 현재는 불가능합니다 질문은 단지 그곳에서 멈추거나 그게 무엇 이었습니까? 권리 기본적으로 그렇습니다 이는 기본적으로 실제 행 수에 대한 증거입니다 그래서 컴파일이 될 것입니다

테이블 변수를 실행하십시오 오, 예상 된 계획부터 시작하고 있습니다 그렇게하지 않으면 그것은 여전히 ​​한 행의 추측 된 추측 횟수를 취합니다 다시는 이것이 예상 된 계획이며 실제로 데이터를보기 전에입니다

이것의 아무도는 이것이 정당한 최적화를하기에서 그것을 멈출 것이다 어떻게 작동하는지 보도록 하죠? 이제 우리는 이것이 어떻게 생겼는지 보게됩니다 당신 좋아, 그럼 내가 데모에 뛰어든다 나는 내 자신을 빨리 소개 할 것이다

저는 동료를 대우하고 있습니다 나는 쿼리 처리 팀의 기술자입니다 SQL 데이터베이스 엔진입니다 그리고 저는 약 2 년 반 동안 팀과 함께 있었고 실제로 적응력이 뛰어난 지능적인 사람들과 실제로 관련되어있었습니다 Kevin이 예를 들어 설명했던 기능들, 나는 적응 형 조인을위한 엔지니어가 아니 었습니다

의견 및 최근에 나는 형제를 위해 일해 왔습니다 모드 메모리 부여 피드백은 현재 공개 미리보기 상태이며 CTP 20의 완전한 레벨 150에 속합니다 이제 모든 데모에서 로마 또는 민주당의 은상 목적에 대한 데모를 살펴 보겠습니다 나는 지금 DW 와이드 세계 수입업자들을 사용할 것입니다

이 특성은 전투력 150 이하에서만 사용 가능합니다 앞으로는 SQL 19에 대해 말하고 있습니다이 기능은 반드시 클라이언트의 모양을 변경하지는 않으므로 압축 수준 요구 사항을 제거하기를 바랍니다 항상하고있는 것처럼 기억의 근거를 바로 잡는 것입니다 모든 컴팩트 레벨에서이 기능을 사용할 수 있기를 바랍니다

Short Elementary를 보면 특히 흥미로운 일입니다 하루에 예상치를 초과하고 편안함 요구 사항 없이는 300,00000 개의 검색어가 표시됩니다 이 기능을 사용하면 3000000 개의 쿼리가 도움이 될 것입니다 알았어 그래서 이걸 전투 레벨 150에 보냅니다

좋아 그리고 우리는 프로 카시를 먹일거야 보통 Eddie 범위 기여도 설정을 수행하면됩니다하지만 저는이를 위해 최선을 다하고 있습니다 그래서 기본적으로이 데이터베이스는 전형적인 스타 스키마입니다

우리는 한 무리의 팩트 테이블을 가지고 있습니다 차원 테이블 예를 들어이 테이블을 보면이 사실에 아마 2 천만 개의 행이있을 것입니다 나는 실제 생산 작업량에서 한 행을 다시 가지지 않는다는 생각에 통계를 제공 할 것입니다 그것은 당신에게 나쁜 계획들을 줄 것입니다

여기이 미친 곳이 있습니다 우리는 해쉬 조인을 얻을 것이고, 우리는 order by 절을 사용하게 될 것입니다이 절은 다시 해쉬 조인 모두를 정렬 연산자로 제공 할 것입니다 우리의 메모리를 소비하는 운영자에게 응답했고, 통계에 피드 테이블에 행이 하나 있다고 생각했기 때문에 이에 답했습니다 그것은 잘못된 기억의 근거를 얻게 될 것입니다

또는 메모리가 거의 주어지지 않을 것입니다 그리고 우리는 그것이 임시 DB로 당겨지고 있음을보아야합니다 그래서이 위대한 것은 아마 2 초 동안 뛰게 될 것입니다 그 동안 나는 이야기하고 싶습니다 이전에 그런 식으로 쇼 계획 속성에 대한 자세한 내용

그들 중 많은 분들이 Dennis에게 훌륭한 세션을 제공하도록 권유하고, 메모리 보조금 피드백이 여러분을 기다리는 것을 알 것입니다 라이브 데이터가 들어오는 것을 볼 수 있습니다 따라서 일부 고객과 마찬가지로 Hey와 같습니다 사고는 시원합니다 하지만 그때 가야 해

메뉴를 시작해야합니다 라이브 데이터를 볼 수있는 설치 마법사가 있습니다 쉽게 볼 수있는 방법과 지금 우리는 내가 보여줄 상호 계획 속성을 가지고 있습니다 잠시 후에 봐라 이 공란을 그렇게 명확하게 봅시다

두 해시 응답 연산자는 그 이유 때문에 충분합니다 추정 된 데일란 원은 실제로 약 3000000 개의 행을가집니다 좋아, 그래서 당신이 기억에서 속성을 보면 내가 말하고 있었던 속성들 정보 속성을 부여하면이 속성 호출이 있습니다 피드백이 조정되었고 현재 그 값은 첫 번째 실행이 아니기 때문에 처음으로 쿼리를 실행하면 사용법을 추적 할 것입니다

디스크에 유출 된 경우 운영자가 실제로 얼마나 많은 메모리를 필요로 했습니까? 실제로이 빌드를 두 번째로 막을 필요가 있으므로 두 번째로이 쿼리를 실행합니다 피드백은 사용법에 따라 결정됩니다 우리는 그것이 쏟아지지 않도록 필요한 기억을 제공 할 것입니다 또한 약 29 초가 걸렸음을 알기도합니다 일시적 DB 주문이 있었기 때문에 쿼리 완료에 실패한 경우, 스퍼스는 상당히 비쌉니다

OK, 약 3 초가 걸렸으므로 거의 10 배 더 빨라졌습니다 이제 속성을 살펴 보겠습니다 좋아, 어디 있니? 좋아, 네가 여기 보면 이제 속성이 변경되었습니다 예, 조절은 피드백을 의미하고 피드백이 적용되었습니다

이 경우 여러 번, 아마도 공정하게 다시 실행하십시오 예라고 말하는 지점에 도달 할 것입니다 이는 메모리 보조금 피드백이 시작되었음을 의미합니다이 단계가 적용되었습니다 그것은 필요한 정확한 메모리를 가지고 있으며 더 이상 변경하지 않을 것입니다

그리고 메모리 건 피드백이 비활성화 될 수있는이 경우도 있습니다 예를 들어, 전력계에 민감한 식물이 있습니다 이것은 파라 미터 및 물건을 가지고 있기 때문에 메모리 부여 피드백에 대한 비 목표입니다 처음으로 파라 미터를 사용하면 매우 낮은 장미를 얻게되고, 두 번째로 파라 미터를 통과 한 파티가 돌아 오면 변동될 것입니다 백만 줄 이니까 요동 치고 22 개 집행 이후에는 회원국이 좋아할 것입니다

이봐, 난이 직업을 돕지 않을거야 증가하고 우리는이 시점에서이 기능을 비활성화 할 것입니다 이 속성은 무효로 읽히지 않습니다 미래가 너를 미치지 못하게하는 것을 의미한다 그것은 하나의 시나리오가 될 수 있습니다 거기에 시나리오가있을 수 있습니다 몇 가지 다른 이유로 비록 계획의 경계 감각이 아니에요

어떤 이유로 든 정적 인 준비가되어 있어도 버그가 있습니다 무언가가 잘못되었다는 것을 알고있을 때 장애인이 될 수 없습니다 당신은 우리에게 다가 갈 수 있으며 문제를보고하고 다른 전력 계량기 중 일부는 볼 수있는 정확한 근거가 없다 제 1 장소에 정원 정확한 보조금 및 메모리 보조금 피드백을 걷어차 필요가 없습니다 좋아요, 그밖에 내가 생각하는 것 이외에 통계를 설정하려고합니다

원래 카운터로 돌아 가지 마십시오 데모의 나머지 부분을 엉망으로 만들면 계속할 수 있습니다 감사 이것은 우리가 작업하고있는이 기능의 단점을 실제로 잘 보여줍니다 우리가 여기서하려고하는 것은 당신이 더 많은 일을하지 않고도 일들을 더 빨리 진행할 수있는 기능입니다

권리 우리는 쿼리를 전혀 건드리지 않았다는 것을 알았습니다 우리는 약 29 초 만에 처음으로 달렸다 동일한 데이터에 대해 똑같은 쿼리를 다시 실행하면 29 초에서 3 초가됩니다 기능의 일종은 기능을 활용하기 위해 무엇이든 다시 작성하지 않고도 더 빨리 수행 할 수있는 기능입니다

따라서 테이블 변수 지연 컴파일 레거시 동작 수동 통계 생성 및 임시 테이블 업데이트 수동 통계 작성을 할 수 있습니다 테이블 변수를 업데이트 할 수 있습니다

이해해 진술서 세금 환급 일시 중지하고 다시 추정하십시오 그래서 여기서의 변화는 테이블 생성입니다 정의

제약 조건을 사용하면 테이블 변수에 대한 임시 테이블을 검사 제약 조건의 기본 키 고유성에만 적용 할 수 있습니다 테이블 변수 생성의 일부로 자동 통계 생성은 임시 테이블에서 발생하지만 테이블 변수에서는 발생하지 않습니다 그리고 마지막으로 하나의 배치에서 시도 객체를 사용하여 생성하면 동일한 배치에서 사용합니다 임시 테이블을 참조하는 명령문을 임시 테이블로 컴파일합니다 첫 번째 실행까지 연기 된 것으로 존재하지 않습니다

그래서 그 일괄 처리 내에서 생성 된 임시 테이블을 참조 할 경우 우리는하지 않을 것이다 그 명령문을 컴파일 할 때까지 우리는 모든 것을 다 실행했습니다 따라서 예상되는 행 수에 대해 적절한 숫자 처리를 할 수 있습니다

테이블 변수 그 같은 상황에서 너 한테 고정시킬거야? 하나의 견적 왜냐하면 우리는 그 진술 텍스트의 중간에 멈출 수있는 방법이 없기 때문입니다 일시 중지하고 다시 추정하십시오

그래서 여기에 변화가 있습니까? 테이블 변수 지연 컴파일로 다시 150 compatmode의 일부입니다 그리고 그것은 그가 Yup 업그레이드를 2019로 변경하고 1:50 호환성을 켜야 만하는 유일한 방법입니다 그리고이 동작은 테이블 변수를 참조하는 명령문의 컴파일을 켭니다 그것은 존재하지 않았다 첫 번째 실행 때까지 연기가 연기 되었습니까? 인터리브 된 실행과 같습니까? 우리는 그 진술에 도달 할 때까지 기다리고 있습니다

그리고 그 전에 얼마나 많은 데이터가 그 테이블 변수에 있는지 계산해 봤습니다 해당 테이블을 참조하는 명령문을 컴파일하십시오 테이블 변수 이제 우리는 그것을 볼 수 있습니다 그래서 전에 테이블 변수를 다른 컴파일하기 전에, 그래서 어떻게이 단어가 소피 쿼리를했는지 또는 당신은 적절한 seger했다

초기 컴파일 동안 테이블 변수를 참조하고 최적화 단계를 수행하는 일련의 명령문이 있습니다 테이블 변수에 의해 반환 된 실제 행 수가 꽤 적지 만 일종의 OK 인 테이블 변수에 대해 하나 귀하의 견적은 완전히 꺼져 있으며 여기에 테이블 변수가있는 경우 문제가 발생합니다 하류에있는 사업자들의 무리는 추정 된 의지를 전파 할 것입니다 대부분의 이러한 의사 결정의 대부분이 사망에 이르기 때문에 품질은 최적화를 수행합니다

중첩 루프 조인이나 해시 조인을 사용하기 위해 조인 알고리즘과 같은 카디널리티 추정은 어떻게됩니까? 그래서 이러한 모든 결정 카디널리티 평가에 영향을 받습니까? 이 개선 이전에 어느 작업을 중단 했습니까? 우리 주변에 어떻게 그렇게 접근 했습니까? 모두 잘못되었거나 손님이 예상 한 것입니까? 재 컴파일 옵션을 사용하여 재 컴파일 되었습니까? 아니면 대신 임시 테이블을 사용합니까? 또는 옵션 해시가 옵션을 선택한다고 말하는 것처럼 강제로 힌트에 가입해야합니다 중첩 루프 조인을하지만 테이블 변수가 다른 컴파일을 사용합니다 이 기능을 사용하지 않아도 문제가 해결되고 떠날 수 있습니다 이것은 전투 레벨 140에 우선적으로 적용됩니다

나는 이것을 140으로 보냈을 뿐이다 개선과 우리는 우리가 얻는 이익이 무엇인지 알 것입니다 우리가 그것을 가능하게 할 때 좋습니다, 여기 마스터가 있습니다 좋습니다, 그래서 우리는 탁자, 변수 호출 딸을 선언하고 우리는 우리 학년에서 그것을 참조 할 것입니다

그래서 이것은 아마도 2 초 동안 진행될 것입니다 계획 모양을 보면 재미있는 일종입니다 당신은 지금 당신이 보는 것을 나에게 말할 수 있습니다 앞으로 전투 레벨 150없이 볼 수있는 것을 기억하고 나에게 말해 줄 수 있습니다 계획을 살펴 봅시다

알았어 그래서 좋습니다 이것이 우리가 보는 테이블 변수입니다 예상 행 수와 추정치에서 수신 된 행 수는 기본값이며 실제 행 수입니다 그것은 실제로 얻었다

약 250 만명이 그렇게 벗어 났습니까? 그리고이 계획에 잘못된 점이 무엇입니까? 모든 입력 누군가 뭔가를 말했다 그래, 관절 유형 그래서 당신이 그것을 볼 수있는 경우 볼 수 있습니다 중첩 루프 조인입니다 우리가 가지고 있기 때문에 좋은 선택의 종류가 아닙니다 350 만 줄과 같이 행 수가 높아집니다

합류하면 더 좋았을 것입니다 이는 예상치를 기반으로하기 때문에 직관적입니다 1의 행 크기, 우리는 너무 적은 메모리로 시작한 다음 10 DB로 스포크가 있습니다 그리고 당신도이 계획에서 병렬성을 갖고 있지 않다는 것을 알 수 있습니다 이것을 전투 레벨 150에서 다시 실행하고 우리가 얻은 것을보고 또한 약 19 초를 신중히 지적합시다

방법을 보자 더 좋아지면 좋아, 150 피울거야 그리고 나는 계산서를 달리고있다 나는 똑같은 테이블에 대해서 똑같은 질의를 사용하고 있는데, 활과 같은 카레를 사용하고 있습니다

누군가 다행히도 우리는 방법이 없습니다 그 때까지 Kiddin 기능을 보았으나, 다음 릴리스에서는 훌륭한 사회 계획 속성을 갖게 되길 바랍니다 이제는 테이블 변수가 빌드 사이트에 있기 전에 대칭 이동한다는 사실을 처음부터 살펴 보겠습니다 이제 프로브 측에 있으므로 보자 실제 행 수는 실제로 행의 수를 줄인 것이 실제로 정확하고 지난 번 예상 한 것보다 좋습니다

그리고 중첩 된 루프 대신 조인 알고리즘이 정확합니다 우리는 해쉬 매치 (hash match)를 가졌고, 이제는이 법안을 가지고 있지 않습니다 이 기능을 사용하면됩니다 우리는 개선을위한 나쁜 계획을 수여하고 있습니다 우리는 발전하고 있습니다

계획은 인턴의 수행 능력을 향상시키고 그 효과를 나타냅니다 9 초 네 다시 한번 그것은 또 다른 예입니다 의 무엇이든 바꿀 필요없이 빠르게 물건을 만들 수 있습니다

통과하지 않았습니까? 별개의 개수 처음에는 그것에 대해 조금 설정하십시오 이것이하는 일은 정답의 근사치를 제공하는 것입니까? 그리고 매우 작은 메모리를 사용하여 매우 빠릅니다 하이퍼 로그 로그라는 기술을 사용합니다 실제 결과를 샘플로 추정하는 방법입니다

결과가 있어야합니다 결과는 97 %의 경우 정답의 3 % 이내가 될 것입니다 알고리즘을 깨고 답을 줄 수있는 복잡한 상황을 만들 수 있습니다 그만해 그러나 97 %의 경우

그것은 아주 작은 마진 안에있게 될 것입니다 그리고 이것은 다시금 재정상의 결과와 같은 것이 아닙니다 정확한 답변이 중요한 부분 분명히 약을 사용하지 않을 것입니다 그러나 당좌 계좌의 잔액은 얼마입니까? 그러나 반응성이 정확도의 마지막 두 자리 수보다 훨씬 중요한 경우에 적합합니다

이것은 많은 의미가 있습니다 따라서 바늘을 몰 때 대시 보드를 운전하면됩니다 마지막 두 자리 숫자는 아무도 알아 차릴 수 없을 것입니다 그러나 업데이트되기 전에 30 초 동안 기다렸는지 알 수 있습니다 맞아요

이것이 정말로 많은 의미가있는 일종의 것입니다 이것은 구문 변경이므로 새로운 구문을 사용하여 옵트 아웃해야하므로 compat 수준 요구 사항이 없습니다 그래서 뚜렷한 수 대신 이제 값이 값의 별개 개수로 계산됩니다 그래서 아주 사소한 변화

표현 내에서 분명히 구별하기 위해 먹일 수있는 것은 무엇이든간에 어떻게 생겼는지 보자 좋아요, 근본적으로 approx count distinct는 주어진 표현식을 평가하고 그룹 내에서 비 ​​고유 null 값의 대략적인 수를 반환합니다 Kevin이 대략 플러스 또는 -3 %의 97 %라고 말한 것과 비슷합니다 주된 이유 중 하나는 응답 성을 사용하려는 것이고 두 번째 것은 응답입니다

그것은 아주 작은 기억 공간입니다 그래서 별개의 셀 수는 매우 철저한 작업이며 대부분의 시간입니다 당신이 그것을 알아 차리면 그것을 게시합니다 반면 MDB 별개로 생각하면 매직처럼 보일 것입니다

아마 기억력이 300 배 적어지기 때문에 구술력을 구별 해내는 인턴이 매우 적게 인쇄됩니다 정확한 가치와 아마도 약간의 시간이 걸릴 것입니다 메모리 집약이기 ​​때문에 다시 말하지만, 데이터 세트에 값이있는 경우 이것은 메모리 사용량이 적은 곳에서 사용할 수있는 완벽한 예와 같을 것입니다 그렇게하지 않으면 흘러 넘치지 않고 큰 지연을 초래할뿐만 아니라, 다른 검색어도 굶주리고 있지 않습니다

그래서 우리가 철자를 모르더라도 필요한 것보다 더 많은 메모리를 사용하고 작은 메모리 사용량을 사용합니다 다른 쿼리에 더 많은 메모리를 제공합니다 어디서나 당신은 철저하고 정교 할 필요가 없습니다 이것은 좋은 일이 될 것이고 배치 모드의이 힌트 감속을 사용하여 나의 carianne를 본다면 좋아 왜냐하면 나는 천둥을 뱃치 모드에서 훔치고 싶지 않기 때문이다

또 하나의 개선점 인 100 oh 지능형 QPQB 트리가 여기에 있습니다 나는 너무 사랑한다 이 기능을 사용하지 않으면이 쿼리가 일괄 처리 모드로 실행됩니다 자 이제 저는 이것을 실행하려고합니다 이것은 정확한 값을 반환 할 별개의 버전입니다

나는 아마 약간의 시간이 걸릴거야 메모리 집약이기 ​​때문에 다시 말하지만 완벽한 완벽한 저녁 식사는 어떤 유형의 쿼리 연도에 따라 달라집니다 계좌 개설 여부를 확인하고 계십니까? 실제로 전적으로 기억에 맞을 것입니다 아마 많은 것을 볼 수 없을 것입니다

첫째, 게임이지만, 특히 MDB 인 경우에는 차이점을 확인하게됩니다 따라서이 보고서에는 약 29000000 개의 별개 값이 있다고합니다 그것이 반환 할 가치이며, 그런 다음 메모리를 살펴 보겠습니다 승인 속성

승인 이렇게 부여 된 메모리는 약 15GB였습니다이 경우에는 분쟁을 시도하지 않았지만 여전히 좋습니다 메모리 1

5GB의 메모리가 많으며 대략적으로 소요되었습니다 12 초 이걸 다시 실행 해보자 테스트를 세고 오류율 내에 있는지 확인하십시오 뭐라구? 시간 낭비하고 기억이 어떻게 생겼어? 뭐라 했니? 우리가 완전히 다른 기능을 사용하고 있기 때문에 다른 쿼리입니다

나는 금전적 인 현금을 지우고 그것을 증명하기 위해 당신을 위해 그것을 다시 실행한다 그것은 완전히 다른 방식입니다 나는 그것이 OK에 영향을 미쳐야한다고 생각하지 않아 약 5 초 후에 끝난다 그리고 메모리 정보를 살펴 봅시다 문자 그대로 1

5KB 272KB에서 100KB조차 보이지 않는 경우 우리가 약간 벗어 났을 정도로 대략 20000000 개의 줄이 있다고 말하면서 그것을 끝내었다 그러나 그것은 아직도있다 특히 대시 보드에서이 문제를 사용하는 경우에는 문제가되지 않습니다 나는 단지 소품 현금을 지우고 완전히 다른 등급이라는 것을 보여주기 위해 다시 한 번 해보겠습니다 이게 어디 있니? 여름, 네, 거기있어, 가라

나는 해외 현금을 먹일거야 그 위대한 재방송하자 승인 아, 그런데 어쨌든 재 컴파일이있었습니다 그렇지 않다면

알았어요 네, 그래도 여전히 같은 성능입니다 30000000 행 그리고 우리는 여전히해야합니다 상대적으로 적은 메모리 인쇄 좋아, 너 한테 돌아가

지금까지 데모에 관해 언급 한 내용에 대해 지금까지 다른 질문이 있습니까? 이것은 근사치 개수는 예외 중 하나이지만 일반적인 경우에는 우리가보고있는 것입니다 뭐야? 코드를 변경하지 않아도되는 기능을 채택 할 필요가 없습니다 그것은 단지 더 빨리 달린다 그리고 그것이 당신을 그들이 compat 수준으로 보았던 이유입니다 그래서 우리가 계획을 최적화하는 방식을 바꿀 수있는 모든 것

또는 계획 수행의 모양 코드에서 아무 것도 변경하지 않아도됩니다 컴팩트 한 수준으로 단단 해지겠습니까? 그렇게하면 당신 밑에서 변화하는 것에 대해 걱정하지 않고 업그레이드 할 수 있습니까? 갑자기 문제 그래서 당신은 월별 명세서 기능이 테이블 값입니다

그래서 다중 문장 테이블 값 함수? 예 거기에 도움이 필요합니다 무언가를 추가하십시오 그러나 사라졌습니다 권리

다시 그래서 대략 별개로 계산하십시오 수학은 내 머리 위로 하이퍼 로그 로그이지만 길입니다 Cliff 노트 버전은 무엇입니까? 그들이하는 일은 상당히 정교한 표본 추출 알고리즘을 사용하는 것입니다

특정 범위의 데이터 세트 내에서 샘플 가져 오기 그리고 그들은 비밀스런 소스가 어떤 것을 대표 해 그것이 좋은 각도의 예가 될 것인지를 알아내는 방법을 가지고 있습니다 따라서 소량의 데이터 만 소화해야합니다 없이 모든 방의 전체 데이터 세트를 검토합니다

동기화를 자랑스럽게 생각하면 유용합니다 데이터 세트를 메모리에 저장할 수있는 경우 매우 큰 데이터 세트가있는 사례 당신은 많은 것을 얻지 못할 것입니다 그게 전부라면 정답에 농장을 베팅하지 않는 완벽한 결정 정확성을 요구하지 마십시오

Don'TN은 빠른 응답이 필요합니다 재무 결과에 대한 정확한 답변이 필요하거나 작은 데이터 세트가 필요한 상황에 적절하지 않으며이를 이해하는 것이 중요합니다 대략 별개의 수는 마술이 아닙니다 이것이 해결할 수있는 문제에 부딪치지 않는다면 항상 빠르지 만 빨리 답할 것입니다 당신을 위해 무엇이든 해결하십시오

그래서 만약 당신이 메모리가 부족하거나 굶어 죽지 않는 메모리의 양 때문에 소비에 의해 별개 그렇다면 당신은 가지 않을 것입니다 이것은 당신을 위해 많은 것을 향상시키지 않을 것입니다 당신이 그것을 실행하는 시간이 길수록 구별되지 않을까요? 항상 걸릴거야? 그만큼의 기억 그리고 그것은 전형적으로 병목 현상이 될 것입니다

아마 메모리지면 피드백이 도움이되었을 것입니다 두 번째 시간을 보여 주었다면 아마이 빌드를 수정했을 것입니다하지만 여전히 진행될 것입니다 모든 작업은 철저한 작업이므로 메모리가 필요합니다 기본적으로 모든 고유 값의 해시 테이블을 구축하고 있습니다

과 값이 수백만 개의 별개의 값을 가지면 정말 큰 데이터 구조가됩니다 Hennis는 많은 공간을 통제합니다 장미 저장소에 배치 모드 그래서 일괄 처리 모드입니다

우리가 컬럼 스토어 인덱스를 갖기 시작했을 때 우리가 컬럼 스토어에 들어온 것 컴 매장 매우 압축 된 공기로 매우 효율적으로 많은 데이터를 처리하기 때문에 좋은가요? 일괄 모드 처리가 그 (것)들로왔다 둘 다 스캔 롯트에 대한 분석 쿼리에서 작동하는 경향이 있습니다 그리고 많은 양의 데이터와 당신은 일반적으로 합계 평균을하는 것과 같은 것을합니다

로스트 또는 이동 하나 시간을 썼다 그래서 당신은 실행, 전체 계획을 통해 하나의 행을 이동합니다 일괄 처리 모드를 통한 흐름은 한 번에 수천 개의 행에 대한 데이터를 전달하고 약 1,000 개의 행을 일괄 처리하고이를 통해 전달합니다 과 그래서 대신 앞쪽 평균 연산자를 사용하면 TH 행의 Rd가 평균에 더 많은 값으로 추가되고 다른 값이 평균에 더해진다

대체 어디에? 한 번의 작업으로 1,000 개의 행을 표시합니다 프로세서 내에서 벡터 응용 프로그램을 사용하므로 속도가 빨라집니다 훨씬 더 효율적이지만 칼럼 스토어와 관련되어있어 최적화 프로그램을 속일 수있는 악명 높은 MVP가 있습니다 일괄 처리 모드를 사용하면 쿼리에 com 상점을 사용하지 않고 있음을 알 수 있습니다 만들기

업데이트 열 저장 테이블이 있습니다 쿼리에 실제로 참여하지 않은 인덱스 최적화 프로그램이 일괄 처리 모드를 사용할 수 있다고 생각하게 만듭니다 그래서 사람들이 이러한 융합 된 작업 해결 방법을 고안하게하는 것이 아닙니다

우리는 당신에게 그것을 사용하는 방법을 줄 것이라고 생각했습니다 앞 그래서 실제로 잡동사니 시나리오에서 유용하므로 하이브리드 트랜잭션 분석 처리가 가능합니다 그래서

다수 더 나은 배치 모드는 매우 효율적입니다 큰 행 집합에 대해 집계를 수행 할 때 사례 사용 사례가 중복되는 열 저장 작업을 평가했습니다 일종의 조작에 의한 지능

너는이 재고 목록이 다 떨어지기를 언제 알았 으면 좋겠다 꽃을 사용하는 표준 예제에서는 꽃을 판매하고 있습니다 당신은 하루가 끝날 때 다 떨어지기를 원합니다 또는 당신은 내일 전에 도움이 될 남은 꽃 잔뜩이 있거나 하루가 끝나기 전에 당신이 다 떨어지게 될지 모른다면 그리고 나중에 사람들을 나눌 때 나타날 수있는 모든 사람들의 기회를 잃어 버립니다

따라서 그것은 부패하기 쉬운 필수품이며, 이것이 어디서 얻을 수 있는지에 대한 한 가지 예일뿐입니다 특정 결과는 인생 데이터에서 분석적 쿼리 결과를 가져 오지만 ETL을 처리하지 않고 몇 시간 후에 분석합니다 따라서 로스트 또는 배치 모드의 일종의 시나리오입니다 열 저장소를 사용할 수없는 경우가 있습니다 그래서

다수 더 나은 배치 모드는 매우 효율적입니다 큰 행 집합에 대해 집계를 수행 할 때 사례 사용 사례가 중복되는 열 저장 작업을 평가했습니다 열 저장이없는 곳에서도 유용합니다

그래서 이것은 일종의 프로세스를 얻는 방법의 차이를 보여주는 그래픽의 일종입니다 여기에 로밍 모드가 표시됩니다 따라서 각 행은 쿼리 계획의 모든 작업을 순차적으로 처리합니다 각 열이있는 열 저장소의 일괄 처리 모드는 별도의 저장소에 있으며 그 행에서 천 개의 행을 가져옵니다 모든 작업을 하나씩 차례로 진행합니다

그러나 1000 명의 전체 집단이 모든 작전을 통해 하나의 단위로 행동을 썼다 고 말했습니다 로스트 용 일괄 처리 모드를 사용하거나 똑같은 작업을 수행 할 수 있으므로 모든 열과 행이 있으므로 수천 줄이 필요합니다 네가 만날 수있는 열 스토어처럼 쿼리에 참여하지 않는 참조 열은 사용하지 마십시오 모든 것을 복원하기 위해 복원

그리고 1000 행의 그 그룹 그런 다음 쿼리의 연산자를 모두 통과합니다 그래서 이것은 우리가 여기에서하고있는 것에 대한 개념 개념의 일종입니다 다시 150 콤팩트입니다 쿼리의 모양을 변경하기 때문에 문제가 발생합니다

최적화 일괄 처리 모드 경험적 방법 따라서 우리는 최적화 프로그램이 일괄 처리 모드 계획을 고려하도록 허용하고 있습니다 열 저장소가없는 경우 그래서 우리는 최적화 된 검색 공간을 열어 가고 있습니다 주어진 쿼리가 가능한 모든 방법을 통해 검색 할 것이기 때문에 문제를 해결할 수 있습니다

맞아요 답을 얻기 위해 취할 수있는 모든 다른 경로를 통해 모든 검색을 해결할 것입니다 주어진 쿼리 그리고 일괄 처리 모드를 추가하여 그 가능성을 폭발 시켰습니다 어느 것이 가장 효율적인지를 탐구하고 평가해야합니다

그래서 거기에는 비용이 있습니다 그래서 우리는 그것을 지우는 것을 피하기 위해 맨 위에 위로 몇 가지 발견법을 넣었습니다 그 길은 당연히 이기지 못할 것입니다 따라서 작은 테이블 인 경우 연산자를 사용한 후에 테이블 크기를 살펴 보겠습니다 일괄 처리 모드로는 아무 것도 얻지 못할 것이기 때문에 여분의 오버 헤드를 처리하지 않을 것입니다

모든 계획을 탐색합니다 입력 쿼리에서 예상 된 카디널리티입니다 최적화를 거치면서 추가 체크 포인트가 생기는데, 모든 일괄 처리 방식 플랜트가 훨씬 더 높은 비용을 지불하고 원격 계획이 무엇인지 알 수 있습니다 아마 평가 일괄 처리 계획을 중단 할 것입니까? 우리가 그것들을 넣기 전에 우리는 어디에 있었는지를가집니다 우리는 할 수 있었다

일괄 처리 모드로 실제 쿼리 실행 속도를 약간 높일 수는 있지만 컴파일 시간이 길어지면 어떤 이득도 얻지 못합니다 실행 시간 이것이 바로 이러한 최적화를 통해 여기서 피하고자하는 것입니다 우리는 또한 많은 컨트롤을 제공합니다 따라서 배치 모드를 강제로 해제 할 수 있습니다

할 수있어 사용 가능하게 만들지 만 강제되지 않습니다 왜냐하면 옵티마이 저가 계획을 완료하는 더 빠른 방법을 찾으면 더 좋든 그렇지 않든간에 그렇게 할 것입니다 그래서 우리는 조금 새로운 배치 모드 스캔 연산자를 도입하여이 연산자가 실제로 데이터 페이지 밖으로 또는 열 저장소에서 데이터를 읽는 쿼리 실행의 일부가되었습니다 그리고 그 파이프 라인에 데이터를 공급하기 시작합니다

그리고 이제 그 모든면에서 우리는 배치를 형성하고 있습니다 따라서 스캔 운영자는 장미 점을 읽으면 그 시점에서 학사 학위를 받고 그 이후의 모든 것은 배치 모드로 실행됩니다 따라서 가능한 한 충분합니다 워크로드의 상당 부분이 분석 쿼리 인 경우 어떤 이점이 있습니까? 조인 및 집계와 같은 연산자가 수십만 개의 행을 처리하는 곳은 어디입니까? IO 경계가 완전히 바뀌면 작업 부하가 CPU에 바인딩됩니다 그러면 CPU로 무엇을 할지라도 아무 것도 바꿀 수 없습니다

그리고 거기에는 추천도 있습니다 열 스토어가 데이터의 양을 줄이기 때문에 열 저장소를 추가 할 수 있다면 실제로 사용할 수 있습니까? 그렇다면 사용해야 할 부분을 크게 줄여야합니까? 일반적으로 열 저장소에서 90 % 압축을 얻으므로 원래 크기의 10 %입니다 또한 쿼리에 참여하는 열만 볼 수도 있습니다 따라서 테이블에 천 개의 열이 있고 오전 5 시가이 쿼리에 참여하는 경우 나는 이것 때문에 5 열을 읽어야 만합니다 별도의 물리적 컨테이너에있는 각 열

따라서 열 저장소 인덱스 광고를 너무 많이 생성하여 열 저장소 인덱스 광고를 작성하면 작업 부하의 트랜잭션 부분에 너무 많은 오버 헤드가 발생합니다 또는 턴을 많이하고 있다면 칼럼 스토어의 성능이 저하 될 것입니다 응용 프로그램이 일반적인 별에 아직 지원되지 않는 기능에 의존하기 때문에 가능하지 않은 경우 분명히 당신은 그들을 사용할 수 없습니다 그래서 그것들은 당신이 그들을 사용하지 않을 때입니다

이제 우리는 당신의 외모를위한 데모를 가지고 있습니다 다시 말하지만, 이것은 있습니다 점점 죄송합니다 다시 말하지만,이 기능은 내가 호환 할 수있는 가장 부유 한 기능이므로 컴팩트 레벨 150에서 사용할 수 있습니다 2이 데모의 목적을 위해 다시

나는 우리가 칼럼 스토어를 가지고 있지 않다는 것을 지적하고 있습니다 그렇지 않은 경우 색인을 작성하십시오 로스트에서 배치 모드는이 갈망이 프로 모드로 실행되는 방식으로, 이제는 내가 그렇게 보여줄 것입니다 예를 들어, 귀하의 사용자와 마찬가지로, 이봐, 나는 기본적으로 내 경력이 배치 처리와 함께 bash Motorola 상점에서 실행되는 것을 원하지 않는다 사용자가 배치 모드 처리를 사용하지 않도록 명시 적으로 선택할 수있는 배치 모드 힌트의 Decelle입니다

그래서 저는이 손을 사용할 것입니다, 그래서 우리는 어떤 성능을 볼 수 있습니다 로마 모드와 같습니다 그리고 우리가 미래를 건설하기 전에 우리는 그 초등학생을 보았습니다 그래서이 개선점은 누구입니까? 우리는 그 기초에서 유익을 얻을 수 있도록 건설 할 것입니다 대부분의 분석 작업 부하는 일괄 처리를 통해 이익을 얻었지만 열 저장 인덱스가 필요하다는 요구가있었습니다

좋아, 보자 그래서 당신은 그것이 진짜 모드라는 것을 알 수 있습니다 이 모든 연산자가 브로 모드에서 실행중인 것을 볼 수 있습니다 좋아, 그럼하자 경과 시간을 살펴 보겠습니다

11 네 11 초는 힌트없이 이것을 재실행합시다 기본적으로 행 저장소에서 일괄 처리 모드로 실행되므로 일괄 처리가 진행됩니다 11 초에서 3 초

Forex Forex 개선 그래서이 모든 것들을 볼 수있는 것처럼 보자 이제 배치 실행과 내가 지적하고자하는 또 다른 흥미로운 점이 있습니다 스토리지는 로스트 또는 그 의미를 설명 할 때 볼 수 있습니다 즉 해당 스토리지를 의미합니다

여기서 무료 데이터 원본은 AB 트리 또는 힙 이었습니까? 기본 로스트 또는 테이블, 열 스토어가 아니므로 데이터가 로스트에서 나왔음을 알 수 있습니다 그러나 물리적 스캔에서 일괄 처리 모드로 처리됩니다 내 생각에는 승인 배터리 모드 및 복원에 대한 3 가지 질문

우리는 질문이 있습니다 그러면 얼마나 비쌉니다 이러한 생물은 일반적으로 자원을 절약하므로 더 빨리 진행되므로 비용이 적게 듭니다 맞아 희망을 갖고 잘하십시오

그리고 이것이 우리가 일이 점점 악화되는 것을 막는 방법입니다 따라서 전체 쿼리 성능을 제공하는 변경 사항을 선택해야합니다 그리고 매년 또는 2 또는 길게주기가 있습니다 그것의 현재 세트를 취할 것입니다 동일한 코드를 SQL 서버 버전으로 제공하십시오

당신의 전제라면 그러나 이것이 다시 시장의 차별화 요소라고 생각하는 호환성 수준입니다 플랫폼을 서비스로 실행하든, 아니면 서비스로 실행하든 동일한 코드가 있습니다 VMS 또는 전제의 서비스로서의 인프라 그것은 모두 동일한 쿼리 엔진이므로 실제로 만듭니다

보드 전반에 걸쳐 좋은 호환 이야기 예, 관리는 인프라에서 Azure의 모든 부분과 동일한 방식으로 업데이트됩니다 네 희망 사항이 개선됩니다 그리고 이것이 우리가 일이 점점 악화되는 것을 막는 방법입니다

따라서 전체 쿼리 성능을 제공하는 변경 사항을 선택해야합니다 그리고 매년 또는 2 또는 길게주기가 있습니다 그것의 현재 세트를 취할 것입니다 동일한 코드를 SQL 서버 버전으로 제공하십시오 당신의 전제라면

그러나 그것이 다시 시장의 차별화 요소라고 생각하는 호환성 수준입니다 플랫폼을 서비스로 실행하든, 아니면 서비스로 실행하든 동일한 코드가 있습니다 VMS 또는 전제의 서비스로서의 인프라 그것은 모두 동일한 쿼리 엔진이므로 실제로 만듭니다 보드 전반에 걸쳐 좋은 호환 이야기

예, 관리 인스턴스는 인프라에서 Azure의 모든 부분과 동일한 방식으로 업데이트됩니다 희망 사항이 개선됩니다 그리고 이것이 우리가 일이 점점 악화되는 것을 막는 방법입니다 따라서 전체 쿼리 성능을 제공하는 변경 사항을 선택해야합니다 그리고 매년 또는 2 또는 길게주기가 있습니다

그것의 현재 세트를 취할 것입니다 동일한 코드를 SQL 서버 버전으로 제공하십시오 당신의 전제라면 그러나 그것이 다시 시장의 차별화 요소라고 생각하는 호환성 수준입니다 플랫폼을 서비스로 실행하든, 아니면 서비스로 실행하든 동일한 코드가 있습니다

VMS 또는 전제의 서비스로서의 인프라 그것은 모두 동일한 쿼리 엔진이므로 실제로 만듭니다 보드 전반에 걸쳐 좋은 호환 이야기 예, 관리는 인프라에서 Azure의 모든 부분과 동일한 방식으로 업데이트됩니다 그래서 질문은 도움이 나를 이해하는 데 도움이됩니다

백색 흰색 배치 모드가 덜 효과적 일 경우 그래서 그 문제는 무엇입니까? 최적화 도구 가능한 모든 계획을 평가하여 사용할 가장 저렴한 계획이 무엇인지 확인해야합니다 그리고 돌아서

가능한 단위로 배치 모드에서 단지 가능성의 수를 곱했습니다 그것은 평가해야하므로 더 많은 시간이 걸릴 것입니다 최적화 단계에서 컴파일하는 동안 고정 세금이 적용됩니다 따라서 최적화를 수행하는 데 10 초가 걸리면 쿼리 실행 시간이 3 초 2 초가됩니다 당신은 여전히 ​​길을 잃었습니다

그래서 그 아이디어가 있습니다 승인 이것이 우리가 지능형 쿠폰에 대해 이야기해야했던 것입니다 저기있다 더 많은 정보를 얻으려는 곳에서도 질문 할 수 있습니다

나무도 평화의 하나 Azure에 대한 빠른 트랙이라는 프로그램이 있습니다 Azure로 마이그레이션하는 경우 우리는 당신을 도울 수있는 연습을했습니다

검증 된 사례를 통해 Microsoft는 전문성을 발휘하여 어디에서나 전문성을 발휘할 수 있습니다 설계 구성 개발부터 배포, 마이그레이션에 이르기까지 모든 것이 여러분의 도움을받을 수 있습니다 네, 고마워요