3
Azure SQL 데이터웨어 하우스 데이터베이스에서 열 수준 통계의 새로 고침 (즉, UPDATE)을 자동화 할 계획입니다. Azure SQL 데이터웨어 하우스의 열 수준 통계 업데이트 자동화
- DATE 컬럼 : 나는 사이트 특정 테이블에서 작업을 로그온 할 계획 동적으로 다음과 같은 방법을 사용하여 통계를 갱신하는 SQL을 생성 격주,
- 표시기/부울 열은 매월 새로 고침되고
- QTY/AMT (사실) 열은 분기별로 새로 고침됩니다.
https://msdn.microsoft.com/library/ms190330.aspx에서 STATS_DATE 기능을 검토했지만이 기능은 열 수준 통계에 필요한 세부 정보를 지원하지 않는 것으로 보입니다.
object_id name stats_id user_created statistics_date
107,141 MySchema_MyTable_Col1 2 1 [NULL]
107,141 MySchema_MyTable_Col2 3 1 [NULL]
107,141 MySchema_MyTable_Col3 4 1 [NULL]
내가 간과하거나이 기능을 오해하고 내가 할 수 있어야나요
SELECT
s.object_id,
s.name,
s.stats_id,
s.user_created,
STATS_DATE(object_id, stats_id) AS statistics_date
FROM sys.stats s
where object_id = 107141;
결과 : 예를 들어 통계가 수집 한 세 개의 열이 내 테이블 중 하나에 대한 출력은 STATS_DATE에 대해 NULL을 보여줍니다 STATS_DATE를 사용하여 열의 통계를 관리 하시겠습니까?
--Create a columnar demonstration table
create table My_Schema.steve_test_table_columnar (c1_c integer, c2_c smallint, c3_c date, c4_c decimal(18,2)) ;
--Create a heap demonstration table
create table My_Schema.steve_test_table_heap (c1_h integer, c2_h smallint, c3_h date, c4_h decimal(18,2)) with (HEAP) ;
-CREATE STATISTICS statements:
CREATE STATISTICS My_Schema_STEVE_TEST_TABLE_COLUMNAR_C1_C ON My_Schema.STEVE_TEST_TABLE_COLUMNAR (C1_C) ;
CREATE STATISTICS My_Schema_STEVE_TEST_TABLE_COLUMNAR_C2_C ON My_Schema.STEVE_TEST_TABLE_COLUMNAR (C2_C) ;
CREATE STATISTICS My_Schema_STEVE_TEST_TABLE_COLUMNAR_C3_C ON My_Schema.STEVE_TEST_TABLE_COLUMNAR (C3_C) ;
CREATE STATISTICS My_Schema_STEVE_TEST_TABLE_COLUMNAR_C4_C ON My_Schema.STEVE_TEST_TABLE_COLUMNAR (C4_C) ;
CREATE STATISTICS My_Schema_STEVE_TEST_TABLE_HEAP_C1_H ON My_Schema.STEVE_TEST_TABLE_HEAP (C1_H) ;
CREATE STATISTICS My_Schema_STEVE_TEST_TABLE_HEAP_C2_H ON My_Schema.STEVE_TEST_TABLE_HEAP (C2_H) ;
CREATE STATISTICS My_Schema_STEVE_TEST_TABLE_HEAP_C3_H ON My_Schema.STEVE_TEST_TABLE_HEAP (C3_H) ;
CREATE STATISTICS My_Schema_STEVE_TEST_TABLE_HEAP_C4_H ON My_Schema.STEVE_TEST_TABLE_HEAP (C4_H) ;
--UPDATE (aka "REFRESH") STATISTICS statements:
UPDATE STATISTICS My_Schema.STEVE_TEST_TABLE_COLUMNAR (My_Schema_STEVE_TEST_TABLE_COLUMNAR_C3_C) ;
UPDATE STATISTICS My_Schema.STEVE_TEST_TABLE_HEAP (My_Schema_STEVE_TEST_TABLE_HEAP_C3_H) ;
UPDATE STATISTICS My_Schema.STEVE_TEST_TABLE_COLUMNAR (My_Schema_STEVE_TEST_TABLE_COLUMNAR_C2_C) ;
UPDATE STATISTICS My_Schema.STEVE_TEST_TABLE_HEAP (My_Schema_STEVE_TEST_TABLE_HEAP_C2_H) ;
UPDATE STATISTICS My_Schema.STEVE_TEST_TABLE_COLUMNAR (My_Schema_STEVE_TEST_TABLE_COLUMNAR_C1_C) ;
UPDATE STATISTICS My_Schema.STEVE_TEST_TABLE_COLUMNAR (My_Schema_STEVE_TEST_TABLE_COLUMNAR_C1_C) ;
UPDATE STATISTICS My_Schema.STEVE_TEST_TABLE_HEAP (My_Schema_STEVE_TEST_TABLE_HEAP_C1_H) ;
UPDATE STATISTICS My_Schema.STEVE_TEST_TABLE_COLUMNAR (My_Schema_STEVE_TEST_TABLE_COLUMNAR_C4_C) ;
UPDATE STATISTICS My_Schema.STEVE_TEST_TABLE_HEAP (My_Schema_STEVE_TEST_TABLE_HEAP_C4_H) ;
--Validation Steps
select s.[schema_id] , s.[name] from sys.[schemas] s where s.[name] = 'My_Schema';
--Results:
schema_id name
24 My_Schema
--Get Table Object ID
select t.[object_id] , t.[name] from sys.[tables] t
inner join sys.[schemas] s
on t.[schema_id] = s.[schema_id]
where s.[name] = 'My_Schema' and t.[name] in ('STEVE_TEST_TABLE_HEAP' , 'STEVE_TEST_TABLE_COLUMNAR');
--Results:
object_id name
516,196,889 steve_test_table_columnar
532,196,946 steve_test_table_heap
--Get Columnd IDs
select t.[object_id] , c.[column_id], t.[name] , c.[name] as Column_Name
from
sys.[tables] t
inner join
sys.[schemas] s
on
t.[schema_id] = s.[schema_id]
INNER JOIN
sys.[columns] c
ON
t.[object_id] = c.[object_id]
where
s.[name] = 'My_Schema'
and t.[name] in ('STEVE_TEST_TABLE_HEAP' , 'STEVE_TEST_TABLE_COLUMNAR')
--Results:
object_id column_id name Column_Name
516,196,889 1 steve_test_table_columnar c1_c
516,196,889 2 steve_test_table_columnar c2_c
516,196,889 3 steve_test_table_columnar c3_c
516,196,889 4 steve_test_table_columnar c4_c
532,196,946 1 steve_test_table_heap c1_h
532,196,946 2 steve_test_table_heap c2_h
532,196,946 3 steve_test_table_heap c3_h
532,196,946 4 steve_test_table_heap c4_h
--Final review of statistics metadata
select t.[object_id] , c.[column_id], t.[name] as table_name
, c.[name] as Column_Name ,st.stats_id , st.name as Stats_Name
,stc.stats_column_id
,STATS_DATE(st.object_id, st.stats_id) AS statistics_date
from
sys.[tables] t
inner join
sys.[schemas] s
on
t.[schema_id] = s.[schema_id]
INNER JOIN
sys.[columns] c
ON
t.[object_id] = c.[object_id]
INNER JOIN
sys.stats st
ON
st.[object_id] = t.[object_id]
and user_created = 1
INNER JOIN
sys.[stats_columns] stc
on
st.stats_id = stc.stats_id
and st.[object_id] = stc.[object_id]
and c.[column_id] = stc.[column_id]
where
s.[name] = 'My_Schema'
and t.[name] in ('STEVE_TEST_TABLE_HEAP' , 'STEVE_TEST_TABLE_COLUMNAR')
;
object_id column_id table_name Column_Name stats_id Stats_Name stats_column_id statistics_date
516,196,889 1 steve_test_table_columnar c1_c 2 My_Schema_STEVE_TEST_TABLE_COLUMNAR_C1_C 1 [NULL]
516,196,889 2 steve_test_table_columnar c2_c 3 My_Schema_STEVE_TEST_TABLE_COLUMNAR_C2_C 1 [NULL]
516,196,889 3 steve_test_table_columnar c3_c 4 My_Schema_STEVE_TEST_TABLE_COLUMNAR_C3_C 1 [NULL]
516,196,889 4 steve_test_table_columnar c4_c 5 My_Schema_STEVE_TEST_TABLE_COLUMNAR_C4_C 1 [NULL]
532,196,946 1 steve_test_table_heap c1_h 2 My_Schema_STEVE_TEST_TABLE_HEAP_C1_H 1 [NULL]
532,196,946 2 steve_test_table_heap c2_h 3 My_Schema_STEVE_TEST_TABLE_HEAP_C2_H 1 [NULL]
532,196,946 3 steve_test_table_heap c3_h 4 My_Schema_STEVE_TEST_TABLE_HEAP_C3_H 1 [NULL]
532,196,946 4 steve_test_table_heap c4_h 5 My_Schema_STEVE_TEST_TABLE_HEAP_C4_H 1 [NULL]
안녕하세요 스티브, 내 테이블에 대한 생성 + 업데이트 통계를 수행하고이 쿼리와 동일한 쿼리를 사용하여 통계 테이블을 쿼리했으며 예상대로 작동했습니다. 재현성있는 문제였습니까? – hirokibutterfield
OP를 더 자세히 업데이트했습니다. – Steve
데이터를 삽입 한 후에도이 테이블이 여전히 NULL 상태를 유지 했습니까? 빈 테이블의 통계는 NULL을 반환합니다. – hirokibutterfield