powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отсутствует информация на странице "Фрагментация" свойств индекса
15 сообщений из 15, страница 1 из 1
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138163
Безенчук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Возникла необходимость создать некластерный неуникальный секционированный индекс у секционированной таблицы. Выполнил соответствующую команду
Код: SQL
1.
CREATE INDEX [IDX_result_addition_robot_call_id_archive_new] ON result_addition_robot_archive(call_id) WITH (ONLINE=ON) ON result_addition_robot_archive_scheme_int(id)
Индекс создался, но при просмотре его свойств оказалось, что страница "Фрагментация" содержит одни нули:
Спойлер
NoData.png
Выполнил пересчёт статистики по всем строкам:
Код: SQL
1.
UPDATE STATISTICS result_addition_robot_archive IDX_result_addition_robot_call_id_archive_new WITH FULLSCAN
Информация на странице "Фрагментация" по-прежнему отсутствует. Выполнил простейший запрос по таблице, выбрав минимальное значение индексированного поля, явно указав, что надо использовать вновь созданный индекс и включив действительный план выполнения - запрос перебирает все строки индекса. При этом статистика по данному индексу существует. Что надо сделать, чтобы этот индекс стал рабочим?

СУБД - Microsoft SQL Server Enterprise 2016 (13.0.7024.30).
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138165
Фотография sparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там фрагментация меньше 0.00 надо увеличить фрагментацию
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138166
Фотография sparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ssms не всегда правильно отображает информацию.
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138167
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безенчук [игнорируется] 

Чтобы получить SEEK по секционированному индексу секционированной таблицы нужно указать секцию в условии.
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138168
Безенчук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sparrow [игнорируется] 

Индекс создавался со значениями по умолчанию, кроме ONLINE=ON.
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138169
Безенчук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor  23.10.2023, 15:29
[игнорируется]
Чтобы получить SEEK по секционированному индексу секционированной таблицы нужно указать секцию в условии.
А если секция заранее неизвестна? И потом, выходит, что все уже существующие запросы надо переписывать, добавляя указание секции, чтобы добиться SEEK?
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138170
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безенчук [игнорируется] 

А диалог не отображает информацию потому что не умеет, для секционированных таблиц.
Посмотрите внимательнее, там написано "Идентификатор секции" = 1, а в ней, скорее всего (как обычно), просто ничего нет.
Спойлер
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select
  *
from
  sys.dm_db_index_physical_stats(
    DB_ID(),
    OBJECT_ID(N'имятаблицы', N'U'),
    (select
       index_id
     from
       sys.indexes
     where
       object_id = OBJECT_ID(N'имятаблицы', N'U')
       and name = N'имяиндекса'
    ),
    null,
    'DETAILED'
)
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138171
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безенчук  23.10.2023, 16:03
[игнорируется]
ShIgor  23.10.2023, 15:29
[игнорируется]
Чтобы получить SEEK по секционированному индексу секционированной таблицы нужно указать секцию в условии.
А если секция заранее неизвестна? И потом, выходит, что все уже существующие запросы надо переписывать, добавляя указание секции, чтобы добиться SEEK?
уберите секционирование индекса
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138172
Безенчук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor  23.10.2023, 16:06
[игнорируется]
уберите секционирование индекса
Секционирование индекса мне нужно для того, чтобы можно было удалять разделы секционированной таблицы. Этому предшествовала попытка удалить секцию таблицы, оказавшаяся неудачной из-за несекционированного индекса:
TRUNCATE TABLE statement failed. Index 'IDX_result_addition_robot_call_id_archive' is not partitioned, but table 'result_addition_robot_archive' uses partition function 'result_addition_robot_archive_partition_int'. Index and table must use an equivalent partition function.
Поэтому я решил создать по тому же самому полю ещё один, но уже секционированный индекс с несколько отличающимся именем. Потом индексы переименовать, удалить старый и грохнуть партицию в таблице. Но вовремя выяснил, что новый индекс нефункционален.
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138173
Безенчук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor  23.10.2023, 16:05
[игнорируется]
А диалог не отображает информацию потому что не умеет, для секционированных таблиц.
Посмотрите внимательнее, там написано "Идентификатор секции" = 1, а в ней, скорее всего (как обычно), просто ничего нет.
Так и есть, для других, заполненных секций, есть вся нужная информация. Спасибо! Теперь бы понять, почему запрос перебирает все строки индекса.
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138174
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безенчук  23.10.2023, 16:50
[игнорируется]
ShIgor  23.10.2023, 16:05
[игнорируется]
А диалог не отображает информацию потому что не умеет, для секционированных таблиц.
Посмотрите внимательнее, там написано "Идентификатор секции" = 1, а в ней, скорее всего (как обычно), просто ничего нет.
Так и есть, для других, заполненных секций, есть вся нужная информация. Спасибо! Теперь бы понять, почему запрос перебирает все строки индекса.
ну, честно говоря, seek оптимизатор использует только в случае кластерного индекса, на некластерном, что с указанием секции, что без, используется scan. однако скан по секции все-равно значительно быстрее чем скан по всей таблице. а может просто у меня данных мало (100 секций от 2 тыс. до 5 млн. записей в каждой)
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138175
Безенчук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor [игнорируется] 

Для полноты картины привожу фактический план выполнения одного и того же запроса при использовании некластеризованного несекционированного
Спойлер
OneRow.png
и некластеризованного секционированного индексов.
Спойлер
AllRows.png
В первом случае читается одна строка, а во втором - все. Дело в статистике?
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138176
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безенчук [игнорируется] 

про индексы на секционированной таблице, в т.ч. запросы с TOP MIN/MAX описано в https://learn.microsoft.com/en-us/sql/relational-databases/partitions/partitioned-tables-and-indexes?view=sql-server-ver15#queries
и трюк с использованием $PARTITION
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT
  min([поленекластерногоиндекса]) AS [поленекластерногоиндекса]
FROM
  sys.partitions AS p
  CROSS APPLY
  (
    SELECT
      min([поленекластерногоиндекса]) AS [поленекластерногоиндекса]
    FROM [таблица]
    WHERE
      $PARTITION.[функкциясекционирования]([полесекционирования]) = p.[partition_number]
  ) AS ca
WHERE
  p.[object_id] = OBJECT_ID(N'таблица', N'U')
  AND p.index_id <= 1
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138178
Безенчук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor  24.10.2023, 00:46
[игнорируется]
и трюк с использованием $PARTITION
да, в таком варианте работает также быстро, как и несекционированный индекс.
...
Рейтинг: 0 / 0
Отсутствует информация на странице "Фрагментация" свойств индекса
    #40138189
Безенчук
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку основной моей задачей было удаление одной из ненужных секций таблицы, то в итоге поступил следующим образом: сначала удалил секционированный индекс, так как от него не было толку, потом отключил обычный, несекционированный. Это позволило удалить табличную партицию, после чего я вновь включил оставшийся индекс, перестроив его.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отсутствует информация на странице "Фрагментация" свойств индекса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]