Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с партициями вместо чтения по ОДНОЙ партиции партиции происходит чтение по двум  [new]
anagon
Member

Откуда:
Сообщений: 6
Проблема с партициями вместо чтения по ОДНОЙ партиции партиции происходит чтение по двум
Писал на стек НЕ помогли http://stackoverflow.com/questions/44079501/sql-server-2104-2016-instead-of-reading-on-one-partitions-reading-on-two-partit

--партиционирование, тут 0 будет включен в одну партицию, а записи больше в другую, 1
    CREATE PARTITION FUNCTION PF_CreditRequest(bit) 
    AS RANGE LEFT FOR VALUES(0); 

    --схема
    CREATE PARTITION SCHEME PS_CreditRequest
    AS PARTITION PF_CreditRequest
    ALL TO ([PRIMARY]); --Да одна файловая группа, пока так удобно


    CREATE TABLE [dbo].[CreditRequest]( 
            [Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY NONCLUSTERED, 
            [IsDeleted] [bit] NOT NULL CONSTRAINT [DF_CreditRequest_IsDeleted]  DEFAULT ((0)), 
            [FIO] [nvarchar](100) )

    CREATE CLUSTERED INDEX [CI_CreditRequest] ON [dbo].[CreditRequest] 
    ( 
            [IsDeleted] ASC, --порядок правильный первым идет ПО чему партиционируем
            [Id] ASC

    )
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
    ON [PS_CreditRequest]([IsDeleted]) --разделяем по битовому полю IsDeleted

--заливаем тестовых данных
    insert into CreditRequest ([IsDeleted],  [FIO]) values
    (1,'Nike'), (0, 'Jane'), (1, 'Patrik')

--тут все ок
    SELECT  $PARTITION.[PF_CreditRequest](IsDeleted), * FROM  CreditRequest 
    WHERE IsDeleted = 0 

    --тут проблема вместо чтения по ОДНОЙ партиции партиции происходит чтение по двум
    SELECT  $PARTITION.[PF_CreditRequest](IsDeleted),  * FROM  CreditRequest
    WHERE IsDeleted = 1


К сообщению приложен файл. Размер - 138Kb
20 май 17, 20:49    [20498726]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с партициями вместо чтения по ОДНОЙ партиции партиции происходит чтение по двум  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36980
where IsDeleted = cast (1 as bit)?
20 май 17, 21:34    [20498772]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с партициями вместо чтения по ОДНОЙ партиции партиции происходит чтение по двум  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
anagon
Проблема с партициями вместо чтения по ОДНОЙ партиции партиции происходит чтение по двум
Более того, сервер делает INDEX SCAN, а не INDEX SEEK

А вот если тип IsDeleted заменить с bit на int, то будет и SEEK, и использование одной партиции...
20 май 17, 21:46    [20498783]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с партициями вместо чтения по ОДНОЙ партиции партиции происходит чтение по двум  [new]
anagon
Member

Откуда:
Сообщений: 6
alexeyvg, магия, работает!
А почему так? Что изменилось в работе построителя запросов?
20 май 17, 22:17    [20498821]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с партициями вместо чтения по ОДНОЙ партиции партиции происходит чтение по двум  [new]
anagon
Member

Откуда:
Сообщений: 6
Гавриленко Сергей Алексеевич, спасибо и так помогло, а мучился)
20 май 17, 22:31    [20498829]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с партициями вместо чтения по ОДНОЙ партиции партиции происходит чтение по двум  [new]
anagon
Member

Откуда:
Сообщений: 6
Тогда НЕ помаю еще 1 момент

--При IsDeleted = 0 Actual Partition Accessed 1 штука
SELECT $PARTITION.[PF_CreditRequest](IsDeleted), * FROM CreditRequest
WHERE IsDeleted = 0

-- А при IsDeleted = 0 Actual Partition Accessed 2 штука
SELECT $PARTITION.[PF_CreditRequest](IsDeleted), * FROM CreditRequest
WHERE IsDeleted = 1

Как я понимаю, Actual Partition Accessed это то количество партиций по которым было чтение?
Как я понимаю, Actual Partition Count это то количество партиций по которым было ....?

К сообщению приложен файл. Размер - 70Kb
20 май 17, 22:40    [20498833]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с партициями вместо чтения по ОДНОЙ партиции партиции происходит чтение по двум  [new]
anagon
Member

Откуда:
Сообщений: 6
Все разобрался
Actual Partition Count это сколько партиций использовано в запросе
Actual Partition Accessed к каким именно по номерам было обращение
Всем большое спасибо!
20 май 17, 22:59    [20498843]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с партициями вместо чтения по ОДНОЙ партиции партиции происходит чтение по двум  [new]
invm
Member

Откуда: Москва
Сообщений: 9349
anagon
Как я понимаю, Actual Partition Accessed это то количество партиций по которым было чтение?
Как я понимаю, Actual Partition Count это то количество партиций по которым было ....?

Actual Partition Count - количество прочитанных секций
Actual Partition Accessed - номера прочитанных секций
20 май 17, 23:03    [20498848]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить