В этом разделе описываются две техники оптимизации, связанные с ROLAP. Иными словами, эти техники могут быть применены только по отношению к хранению многомерных данных. В начале этой главы обсуждается, когда имеет смысл хранить все экземпляры сущности в одной таблице, а когда лучшим решением с точки зрения производительности - в разделенных таблицах данных. После общего введения даются способы, которые можно использовать для разделения данных. Помимо общих правил разделения данных В этом разделе описываются улучшения в SQL Server 2008, связанные с этими техниками. Затем подробно объясняется техника оптимизации запросов, называемая схемой «звезда». Будут представлены преимущества этой техники, а также использование фильтров битовых образов.
Техники оптимизации для бизнес-аналитики
Самым простым и наиболее естественным способом проектирования сущности является использование одной таблицы. При этом если все экземпляры сущности хранятся в одной таблице, от вас не требуется принятия решения, где физически хранить ее строки, потому что система базы данных сделает это для вас. По этой причине вам не нужно выполнять никаких задач администрирования, связанных с хранением данных таблицы, если вы этого не хотите. С другой стороны, одним из наиболее частых случаев плохой производительности реляционных систем баз данных является размещение данных на одном устройстве ввода/вывода. Это в особенности верно, если вы имеете одну или более очень больших таблиц с несколькими сотнями тысяч…
Таблица может быть разделена с использованием любого столбца таблицы. Такой столбец называется разделяющим ключом. (Также возможно использование группы столбцов для отдельного разделяющего ключа.) Значения разделяющего ключа служат для разделения строк таблицы по различным файловым группам. Помимо разделяющего ключа существуют два других важных понятия, связанные с разделением: схема разделения и функция разделения. Схема разделения распределяет строки таблицы в одну или несколько файловых групп. Способ, каким выполняется такое распределение, описывается посредством функции разделения. Другими словами, функция разделения определяет алгоритм, который используется для указания строкам их физическое размещение. Database Engine поддерживает только одну форму разделения, которая является упорядоченным разделением. Упорядоченное разделение разделяет строки…
Прежде чем вы начнете разделять таблицы базы данных, вы должны завершить следующие шаги: 1. Задать цели разделения. 2. Определить разделяющий ключ и количество разделов. 3. Создать файловую группу для каждого раздела. 4. Создать функцию разделения и схему разделения. 5. Создать индексы разделения (если необходимо).
Цели разделений зависят от типа приложений, которые обращаются к таблицам, подлежащим разделению. Существует множество различных целей и каждая из них может быть единственной причиной для разделения таблицы: ♦ увеличение производительности для индивидуальных запросов; ♦ уменьшение конкуренции; ♦ улучшение доступности данных. Если первичной целью разделения таблицы является увеличение производительности для индивидуальных запросов, распределите все строки таблицы равномерно. Причина этого в том, что система базы данных не будет ожидать больше времени при поиске данных из раздела, имеющего больше строк, чем другие разделы. Также, если запросы осуществляют доступ к данным путем сканирования таблицы с большим объемом данных, следует только разделить строки таблицы. (В…
Таблица может быть разделена с помощью любого столбца таблицы. Значения разделяющего ключа используются для размещения строк таблицы по различным файловым группам. Для лучшей производительности каждый раздел должен сохраняться в отдельной файловой группе, а каждая файловая группа должна сохраняться на отдельном дисковом устройстве. Размещая данные на нескольких дисковых устройствах, вы можете сбалансировать операции ввода/вывода и улучшить производительность, готовность и поддержку запросов. Вы должны разделять данные таблицы, используя столбец, значения которого меняются нечасто. Если разделение выполняется по столбцу, который часто изменяется, то любые операции изменения этого столбца могут привести к тому, что система будет перемещать изменяемые строки из одного раздела в другой,…
Для достижения лучшей производительности, наивысшей доступности данных и более простой поддержки следует использовать различные файловые группы для разделения данных таблицы. Количество файловых групп главным образом зависит от используемого вами оборудования. Если у вас несколько центральных процессоров, разделите ваши данные таким образом, чтобы каждый CPU мог обращаться к данным на одном дисковом устройстве. Если Database Engine может обрабатывать несколько разделов параллельно, то время работы вашего приложения будет значительно сокращено. Каждый раздел данных должен размещаться в файловой группе. Для создания файловой группы используйте оператор create database или alter database. В примере 26.1 показано создание базы данных testpartitioned с одной первичной файловой группой…
Следующим шагом после создания файловых групп является создание функции разделения. Функция разделения создается оператором create partition function. Существуют две формы этого оператора в зависимости от типа разделения. Синтаксис create partition function, связанный с этими типами разделения, следующий: create partition function functionjname(param_type) as range [left | right] for values ([boundary_value [, ... л 1]) Здесь function_name задает имя функции разделения; param_type определяет тип данных ключа разделения; boundary_vaiue задает одно или более значений границ, для каждого раздела разделяемой таблицы или индекса, использующего функцию разделения. Оператор create partition function поддерживает две формы опции range: range left И range right. range left указывает, что…
Когда вы разделяете данные таблицы, индексы, ассоциированные с этой таблицей, также могут быть разделены. Вы можете разделять индексы таблицы с использованием существующей схемы разделения для этой таблицы или другую схему. Когда и индексы, и таблица используют одну и ту же функцию разделения и те же разделяющие столбцы (в том же порядке), то таблица и индекс называются выровненными. Когда таблица и ее индексы являются выровненными, система базы данных может перемещать разделы между разделенными таблицами более эффективно, поскольку разделение обоих объектов базы данных выполнено при помощи одного и того же алгоритма. По этой причине в большинстве практических случаев рекомендуется, чтобы вы использовали…
Помимо разделения таблиц вместе с соответствующими индексами, Database Engine также поддерживает разделение двух таблиц с использованием одной и той же функции разделения. Эта форма разделения означает, что строки обеих таблиц, которые имеют одно и то же значение разделяющего ключа, сохраняются вместе. Эта концепция разделения данных называется совместным размещением. Предположим, что помимо таблицы orders существует также таблица order_detaiis, которая содержит ноль, одну или более строк с заказами для каждого уникального номера заказа в таблице orders. Если вы разбиваете обе таблицы, используя одну и ту же функцию разбиения для соединения столбцов orders, orderid и order_details . orderid, то строки обеих таблиц с…
SQL Server 2008 имеет следующие улучшения, касающиеся разделения данных: ♦ преимущества, производительности для многих параллельных планов запросов за счет порядка выполнения операций доступа; ♦ параллельное выполнение запросов к разделенным таблицам при использовании многих потоков управления; ♦ улучшенное редактирование информации, относящейся к разделенным данным. В следующих разделах рассматриваются эти возможности.
© 2021 serversql.ru. Все права защищены.