99 %의 일일 인덱스 조각화를 방지하는 방법


11

나는 100.000 플레이어를위한 최고 점수 테이블을 가지고 있으며, 이는 플레이어 당 하나의 레코드로 하루에 2 번 삽입됩니다. 하루가 끝나면 해당 테이블의 인덱스에 대한 인덱스 조각화는 99 %입니다. 설정을 조정하여이를 방지 할 수있는 방법이 있습니까?

CREATE TABLE HighScore(
    [id] [int] IDENTITY(1,1) NOT NULL,
    [user] [int] NULL,
    [player] [int] NULL,
    [round] [tinyint] NULL,
    [group] [int] NULL,
    [rank] [int] NULL,
    [delta] [int] NULL,
    [roundpoints] [int] NULL,
    [totalpoints] [int] NULL,
PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]


CREATE NONCLUSTERED INDEX [HighScore_RoundGroup_Nidx] ON .[HighScore] 
(
    [round] ASC,
    [group] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO

1
바보 같은 질문이지만 모든 기초를 다룰 수 있습니다-매일 재건 / 재구성하고 있습니까?
JHFB

TABLE DDL이 없으면 누구나 게시 할 것입니다. 기본 키로 GUID를 사용하고 있습니까?
SQL Learner

나는 지금 매일 재건하고 있지만 데이터가 어떻게 진화하는지에 대해 잘 예측할 수 있기 때문에 매일 이런 일이 발생하지 않도록 할 수 있는지 궁금합니다.
olle

1
조각화 수준을 어떻게 결정합니까? 클러스터형 인덱스에 대해서는 전혀 논리적 조각화가 예상되지 않습니다. 내부 조각화는 필요하지 않습니다 FILLFACTOR = 80. 공간을 낭비 할뿐입니다. 모든 열의 길이는 고정되어 있으므로 업데이트시 행을 확장 할 수 없으며 테이블 중간에 삽입을 수행 할 수 없습니다. 99 %는 다른 지수에서도 예상치 못하게 높은 것으로 보입니다. 각 색인에 몇 페이지가 있습니까?
Martin Smith

매일 재건 한 후 99 %가 실제로 갈 것입니다. sys.dm_db_index_physical_stats결과 를 보여 줄 수 있습니까?
Martin Smith

답변:


3

더 높은 FILLFACTOR설정을 시도해야한다고 생각합니다 HighScore_RoundGroup_Nidx(예 : 50 또는 40). 조각화해서는 안되기 때문에 FILLFACTOR0 또는 100으로 설정할 수 있습니다. PRIMARY KEY그래도 조각이 FILLFACTOR나면 새로 할당 된 페이지가 새로 할당 된 다른 페이지와 인터리브되기 때문에 도움이되지 않습니다. 이것은 잘 알려진 SQL Server 문제입니다. 이 색인을 자체 파일 그룹으로 이동하여이 문제를 막을 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.