Никто не трогал это в течение одного месяца.
Ответы на первые три на самом деле находятся в Диаграмме, которую я сделал для вас , которой у вас нетнадоело переваривать и задавать вопросы по поводу ... его часто используют как площадку для обсуждения.
(Это сжатая версия моих гораздо более сложных Sybase диаграмм, которые я вырезал для контекста MS. Внизу есть ссылкадок, если вам нужен полный набор Sybase.)
Поэтому я не собираюсь тратить на вас много времени.И, пожалуйста, не просите ссылки на «справочные сайты», такого нет (то, что доступно - нетехнический мусор), именно поэтому у меня есть свои собственные диаграммы;Есть очень мало людей, которые понимают внутренности MS SQL.
освобождая место
Это правильный термин.MS не удаляет удаленные строки со страницы или удаленные страницы из экстента.Восстановление пространства - это операция, которая проходит через кучу и удаляет неиспользуемые (а) строки и (б) страницы.Конечно, это меняет RowIds, поэтому все некластеризованные индексы должны быть перестроены.
сжатие
В контексте вставленного текста: то же самое, что Reclaiming space.
дефрагментация
операция полномасштабного удаления неиспользуемого пространства.Есть три уровня:
I.База данных (AllocationUnits) для всех объектов
II.Объект (экстент и страница), цепочки страниц, разделенные страницы, страницы переполнения
III.Только куча (без кластерного индекса), тема сообщения
shrinkfile
Совершенно другая операция, чтобы уменьшить пространство, выделяемое на устройстве (файле).Это удаляет неиспользуемые блоки AllocationUnits (отсюда «shrink»), но это не то же самое, что фрагментация AllocationUnits.
shrinkdatabase
Чтобы сделать то же самое для базы данных;Все устройства Распределение, используемое базой данных для всех устройств.
Ответ на комментарии
Постер в SSC не имеет никакого понятия и не содержит прямого ответа на ваш вопрос.
- нет такой вещи, как кластеризованная таблица (сбой CREATE CLUSTERED TABLE)
- есть такая вещь, как кластеризованный индекс (CREATE CLUSTERED INDEX завершается успешно)
- согласно моемудиаграммы, это единая физическая структура;кластеризованный индекс включает строки и, таким образом, исключается куча
- там, где нет кластеризованного индекса, есть две физические структуры: куча и отдельный некластеризованный индекс
Теперь перед вамиПогрузитесь в них с DBCC, который является слишком низким уровнем, и невежественные люди не могут определить, не говоря уже о том, чтобы объяснить, почему и почему, вам нужно понять и подтвердить вышеизложенное:
- create Table_CI (мы собираемся добавить CI, пока нет такой вещи, как Clustered Table)
- добавить уникальный кластеризованный индекс к нему UC_PK
добавить несколько строк
создать таблицу Heap
- добавить в нее уникальный некластеризованный индекс NC_PK
добавить несколько строк
SELECT * FROM sysindexes WHERE id = OBJECT_ID ("Table_CI")
SELECT * FROM sysindexes WHERE id = OBJECT_ID ("Heap")
обратите внимание, что каждая запись sysindexes является полной, независимойта структура хранения (посмотрите на столбцы)
- созерцайте вывод
- сравните с моей диаграммой
- сравните с мусором во вселенной
В будущем я не буду отвечать на вопросы о запутанном мусоре во вселенной и неправильных и дезинформированных сообщениях на других сайтах (мне все равно, являются ли они сертифицированными специалистами MS, они доказали, что они не способныпроверки их баз данных и определения правильной информации)
Есть причина, по которой я потрудился создать точные диаграммы (руководства, рисунки и вся доступная информация для MS, все это чушь; бесполезно искать точную информацию в авторитетном органе, потому что авторитетный) "технически банкрот).
Даже Гейл наконец доходит до
Я подозреваю, что вам будет полезно больше ознакомиться с общей архитектурой индексов, прежде чем возиться с внутренними компонентами низкого уровня.
За исключением того, что нет. Это не сбивает с толку, нетехническое и противоречивое.
Есть причина, по которой я потрудился создать точные диаграммы.
Вернуться к DBCC. Гейл просто неверна. В кластеризованном индексе (который включает строки) одна страница содержит строки. Да, ряды. это конечный уровень индекса. Есть B-дерево, оно живет в верхней части страницы, но оно настолько маленькое, что вы его не видите. Посмотрите на вывод sysindexes. Указатель корня и первой страницы указывает на страницу; это корень кластерного индекса. Когда вы погружаетесь в океан, вам нужно знать, что искать и где его найти, иначе вы не найдете того, что ищете, и вас отвлекут поплавки и самолеты, которые вы обнаружите случайно. .
Теперь посмотрите на ДВУХ ОТДЕЛЬНЫХ СТРУКТУР для NCI и Кучи.
О, и MS перешла от использования терминологии OAM к IAM, где структура данных является индексом. Это вводит в заблуждение. С точки зрения структур данных (записей в sysindexes) все они являются объектами; они могут быть или не быть индексами). Дело в том, кого это волнует, мы знаем, что это такое, это ObjectAllocationMap ... если вы смотрите на NCI, ну и дела, это IndexObjectAllocationMap; если вы смотрите на кучу, это HeapObjectAllocMap. Я позволю вам подумать, что это в случае с КИ. При поиске или использовании (поиск страниц, принадлежащих ОБЪЕКТУ, не имеет значения, все они являются объектами. При этом вам нужно знать, что некоторые объекты имеют PageChain, а другие - нет (другой ваши вопросы). У CI есть они; у NCI и Heaps нет.
Гейл Шоу: «Я сомневаюсь, что такого рода внутренние документы документированы где угодно. В конце концов, мы используем недокументированные функции. Определение индекса зависит от того, кого вы спрашиваете и куда смотрите.
ROTFLMAO. Мои стороны болят, я не мог читать сообщения, которые следовали за этим. Это должны быть разумные люди? Работаете в мире ИТ? Определения ИЗМЕНИТЬ? Что с температурой или временем суток? И это был SQL Server Central? Не глуши?
Когда MS украла SQL Server из Sybase, документация была отличной. Конечно, с каждым основным выпуском они «переписывают» его, и документы становятся все слабее и пушистее (вспомните наше обсуждение в другом посте). Теперь у нас есть милые картинки, которые заставляют людей чувствовать себя хорошо, но неточны, технически. Вот почему у таких серьезных людей, как ты, есть проблемы. изображения даже не соответствуют тексту в руководствах.
Во всяком случае, ОПРЕДЕЛЕНИЯ не меняются. Это определение определений. Они верны в любом контексте. И гм, функция, которую вы используете, является обычной документированной функцией. Был с 1987 года. За исключением MS потерял его где-то, и никто не может найти его. Вам нужно будет спросить Sybase Guru, который был в прежние времена, который помнит, какие именно структуры данных были в коде, который они получили. И если вам действительно повезет, он будет в курсе всех различий, которые MoronSociety представил в 2000, 2005, 2008 годах. Он может даже иметь единственную точную диаграмму, которая соответствует выводам sysindexes и DBCC на вашем компьютере. Если ты его найдешь, поцелуй его кольцо и облей его золотом. Запереть своих дочерей.
(несерьезно, мои стороны убивают меня, веселье переполняет).
Теперь вы понимаете, почему Я не буду отвечать на вопросы о запутанном мусоре во вселенной ? В MoronSociety есть ТОЛЬКО МНОГИЕ дебилы.
-----
Снова Гейл:
"Сканы:
Сканирование индекса - это полное чтение всех конечных страниц в индексе. Когда сканирование индекса выполняется по кластерному индексу, это сканирование таблицы всего, кроме имени .
Когда сканирование индекса выполняется обработчиком запросов, это всегда полное чтение всех конечных страниц в индексе, независимо от того, возвращены ли все строки. Это никогда не частичное сканирование.
Сканирование включает не только чтение конечных уровней индекса, страницы более высокого уровня также считываются как часть сканирования индекса. "
Должна быть причина, по которой ее назвали в честь быстрого ветра. Она пишет "книги"? Да, фантастические романы. Горячий воздух - для специалистов по воздушному шару, а не для ИТ-специалистов.
Полный и полный бред. Весь смысл сканирования индекса и почему он предпочтителен для сканирования таблицы, потому что он пытается избежать сканирования таблицы, заключается в том, что:
- механизм (выполняющий дерево запросов) может сразу перейти к Индексу (кластеризованному или некластеризованному)
- перемещаться по B-дереву, чтобы найти место для начала (которое до этого момента почти не отличается от того, когда оно получает несколько строк, т.е. не сканирует)
- B-дерево (из любой хорошей ТЕХНИЧЕСКОЙ диаграммы) - это несколько страниц, содержащих много, много записей указателя на страницу, так что это очень быстро
- это корень плюс не листовые уровни
- пока он не найдет запись уровня листа, которая соответствует
- с этого момента выполняется последовательное сканирование по уровню LEAF указанного индекса (жирная синяя стрелка)
- теперь для NCI, если вы помните свою домашнюю работу, это означает, что страницы уровня листа заполнены index_leaf_level_entry + CI_key
- , поэтому он сканирует последовательно через уровень листьев NCI (поэтому существует PageChain только на уровне листьев NCI, так что он может перемещаться по нему)
но прыгает повсюду в HEAP, чтобы получить строки данных
но для КИ конечный уровень - это строка данных (страницы данных, содержащие только строки данных, поэтому в них нельзя увидеть «индекс»; страницы КИ, не относящиеся к уровню листьев, являются чистым индексом страницы, содержащие только index_entries)
- поэтому, когда он сканирует индекс leaf_level последовательно, используя PageChain, он сканирует данные последовательно, это одна и та же операция (жирная зеленая стрелка)
- без кучи
- не прыгать вокруг
Для сравнения, затем СКАНИРОВАНИЕ ТАБЛИЦЫ (только MS):
- не имеет PageChain в куче
- не имеет выбора, кроме как начать с самого начала
- и читать каждую страницу данных
- из которых многие будут фрагментированы (содержат неиспользуемое пространство, оставленное удаленными или перенаправленными строками)
- и другие будут совершенно пустыми
В целом, оптимизатор уже решил не использовать сканирование таблицы (кучи), чтобы выполнить сканирование индекса (поскольку для него требовалось МЕНЬШЕ, чем полный диапазон данных, и он мог найти отправная точка этих данных через некоторый индекс). Если вы посмотрите на свой SHOWPLAN, даже для получения единственной уникальной строки PK, он скажет «INDEX SCAN». Все это означает, что сначала он будет перемещаться по B-дереву, чтобы найти хотя бы одну строку. И тогда он может сканировать уровень листа, пока не найдет конечную точку. Если это закрытый запрос, он никогда не переходит к строкам данных.
Кластеризованный индекс не заменит.