Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Вопросы и ответы по MS SQL Server" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
MS SQL Server - дело тонкое...
Информационный Канал Subscribe.Ru |
#240<< #241 |
СОДЕРЖАНИЕ Администраторы баз данных, защищайте свои сервера!
Честное слово, обидно… за нас. SP3a и последние фиксы (из доступных) Вы найдёте тут: http://www.sql.ru/articles/Publications.shtml#fix SP3 для MSDE и OLAP можно найти на сайте Microsoft: Microsoft SQL Server 2000 Service Pack 3a
C уважением, Менеджер памяти SQLOS и SQL Server Buffer Pool
По материалам статьи Slava Oks:
SQLOS's memory manager and SQL Server's Buffer Pool В SQL Server 2005 менеджер памяти SQLOS состоит из нескольких компонент, таких как: Узлы памяти (Memory Nodes), Клерки памяти (Memory Clerks), Кэши памяти (Memory Caches) и Объекты памяти (Memory Objects). На Рисунке 1 изображёны компоненты менеджера памяти и их связи:
Узлы памяти (Memory Nodes) не являются клиентами Memory Manager. Это внутренние объекты SQLOS.
Главная задача Memory Node в том, чтобы предоставить место для распределения памяти. Такие узлы
состоят из нескольких программ, отвечающих за распределение памяти. Существует три основных типа
таких программ. Первый тип - это программы распределения страниц памяти. Второй тип - программы
распределения виртуальной памяти, использующие интерфейсы Windows VirtualAlloc API. Третий тип - это
программы распределения Shared Memory (распределяемой памяти), которые полностью основаны на
интерфейсах Window's file mapping API.
В настоящее время SQL Server не имеет динамически управляемого представления (DMV), которое показало бы набор всех узлов памяти и информацию об их программах распределения. DBCC memorystatus, о котором мы поговорим ниже, кажется наиболее близким по смыслу, но он представляет информацию об узлах центрального процессора, а не об узлах памяти. Но если вспомнить, что узлы процессоров являются подмножеством узлов памяти, станет ясно, что представленная DBCC memorystatus информация достаточна для понимания того, как распределяется память в системе.
Узлы памяти скрыты от использующих Memory Manager компонент. Если клиенту Memory Manager необходимо
распределить память, он должен сначала создать Memory Clerk. Есть четыре типа Memory Clerk-ов:
универсальное хранилище, кэш - хранилище, пользовательское хранилище и объектное хранилище.
Последний тип несколько замысловат. Наряду со своими стандартными функциональными возможностями,
Memory Clerk-и обеспечивают ещё и кэширование данных. Объект памяти SQLOS - это динамическая память, хип. Для распределения память объекту памяти требуется помощь Memory Clerk. Разработчики поддерживают три типа объектов памяти:
Фиксированным размером для последнего типа объекта памяти является 8 КБ. Это такой же размер, как и у
страницы SQLOS. Кроме того, это означает, что объект памяти мог быть создан из Memory Clerk посредством
одной из программ распределения страниц (Это еще один чрезвычайно важный момент! Его нужно запомнить,
пока автор не опишет SQL Server Buffer Pool), SQL Server запрашивает специальный DMV, чтобы получить
все объекты памяти в его процессе: sys.dm_os_memory_objects.
Теперь мы добрались до того места, где всё становится очень интересным. В этой главе всё, о чём уже
говорил автор, включая управление памятью, должно встать на свои места.
Менеджер памяти SQLOS может динамически настраиваться для использования специализированной программы распределения одиночных страницы. Это происходит во время запуска SQL Server, когда настраивается Buffer Pool с целью выбора программы для распределения SQLOS одиночных страницы. С этого момента Buffer Pool поддерживает все динамически распределенные одиночные страницы. Например, можно вспомнить, что объект памяти будет использовать для своих нужд по 8 КБ. Когда компонент создает объект памяти, распределение осуществляется программой SQLOS для одиночных страницы, которая использует BP. При описании менеджера памяти автор упоминал, что каждый большой компонент имеет собственного Memory Clerk-а. Это означает, что Buffer Pool также имеет своего собственного Memory Clerk-а. Как же это возможно, если BP зависит он SQLOS Memory Clerk-а, а менеджер памяти SQLOS, в свою очередь, полагается на BP? Это обычная дилемма первичности курицы или яйца, которую можно часто наблюдать в операционных системах. Ключ к пониманию здесь в том, что Buffer Pool никогда не использует никаких программ SQLOS для распределения страницы. На него влияют только виртуальный и AWE интерфейсы SQLOS.
Все компоненты SQL Server оптимизированы для распределений по 8 КБ так, чтобы они могли распределять память через программу SQLOS для распределения одиночных страницы и, следовательно, через Buffer Pool. Однако, бывают случаи когда компоненту нужны большие буферы. Если это происходит, такое распределение будет обеспечено узлом памяти программы распределения нескольких страниц или виртуальной программой распределения. Как Вы могли догадаться, память будет распределена за пределами Buffer Pool. Именно поэтому автор не любит термин MemToLeave, SQL Server в действительности распределяет память и за пределами этой области!
Описание менеджера памяти SQLOS и Buffer Pool было бы неполным без рассказа о том, как во всём этом может
использоваться AWE. Действительно важно понять, как Buffer Pool распределяет свою память, когда в SQL Server
задействованы механизмы использования AWE. Для начала вспомним, что когда в AWE режиме происходит распределение
VAS и страниц физической памяти, работа BP зависит от интерфейса Memory Clerk-а SQLOS. Во-вторых, нужно иметь
в виду ещё несколько важных отличий. Вначале BP резервирует VAS кусками по 4 МБ, вместо того, что бы
зарезервировать "цельный" большой кусок. Это предоставляет возможность SQL Server высвобождать VAS, когда
процесс её утилизирует (высвобождение было бы не возможно без включения через параметры сервера механизмов
использования AWE, и разделения на куски). После этого распределяется вся требующаяся память, с использованием
AWE. Как раз в этом поведение SQL Server 2000 сильно отличается от поведения SQL Server 2005, т.к. для BP
в SQL Server 2000 была бы распределена вся доступная механизмам AWE память.
Автор пока ещё не закончил описание того, как SQLOS управляет памятью. Поговорить можно ещё о многом. В
следующих статьях будет рассмотрен механизм кэширования, применяемый в SQLOS, и то, как утилизируется память.
Также важным аспектом для последующего изучения станет изучение возможностей получения посредством команд
DBCC информации состояние памяти и сравнение этого подхода с аналогичными возможностями DMV. Can you resolve collation conflict? Автор Алексей Лимонов Обработка и хранение символьных данных на сервере MS SQL 2000 осуществляется при помощи схем сопоставления (collation). Схемы содержат шаблоны каждого символа, правила сортировки и сравнения. В предыдущих версиях сервера MS SQL необходимо было отдельно указывать кодовую страницу и порядок сортировки символьных данных, причем эти настройки действовали сразу на все объекты сервера. В MS SQL 2000 схемы сопоставления позволили более гибко подходить к работе с текстовыми данными. В данной статье рассматриваются основные принципы работы схем, а также их применение относительно российских условий. Символьные данные
В машинном представлении любой символ или знак представляет различные комбинации битов в состоянии 1 или 0.
Соответственно использование одного байта для хранения символа дает возможность определить до 256 различных
символов. Если увеличить объем данных до двух байт, то получим возможность распознавать 65 536 символов. Описание схем сопоставления Схемы сопоставления collation определяют способы хранения и обработки символьных данных сервера. Каждая схема устанавливает:
Для MS SQL 2000 не надо указывать все три параметра, достаточно выбрать имя схемы и порядок сортировки.
На уровне объектов базы - таблиц - схема не указывается. В отличие от предыдущих версий сервера, где схема сопоставления указывалась одна на все объекты сервера, подобная структура позволяет достаточно гибко подходить к работе с символами.
Как ни странно на схемы сопоставления, как и на триггеры, часто не обращают должного внимания. Точнее - о
схемах вспоминают только во время возникновения ошибки "Cannot resolve collation conflict". Для решения
возникающих проблем необходимо понимать причины их возникновения и пути их возможного решения.
При выборе Cyrillic_General_CI_AS все системные базы данных, в том числе база TempDB, будут использовать
именно эту схему сравнения. Как указано выше, все вновь создаваемые пользовательские базы и таблицы по
умолчанию будут иметь точно такую же схему. Однако ничто не мешает при установке выбрать другую схему
и так же с ней работать.
Если в запросах базы OLD_BASE идет работа с временными таблицами, либо переменными табличного типа, то при их создании надо явно указывать нужную схему collation для каждого символьного поля. Например:
Далее, выполнить соединение между полями с различными схемами напрямую нельзя. Соответственно нельзя сделать JOIN или UNION для таблиц с различными схемами collation из одной или разных баз. Иначе опять получим сообщение об ошибке. В этом случае объединяемые поля также необходимо привести к одной схеме при помощи преобразования схемы сопоставлений. Допустим, соединение таблиц OLD_BASE и NEW_BASE можно выполнить так:
а вот запрос на объединение:
Преобразование схем сопоставления полей можно делать в различных вариантах соединений. Но писать каждый раз подобные запросы, с явным указанием схемы collation - не самое лучшее времяпровождение. Тогда можно рассмотреть вариант приведения всех баз к единой схеме - серверной, если это возможно. Для изменения используемой по умолчанию схемы collation базы данных служит команда:
Однако это еще не изменит схему для ваших символьных полей в базе. Менять их нужно либо вручную через Enterprise Manager, либо написать подобный запрос:
При этом имеется ряд ограничений - нельзя изменить схемы для вычисляемых полей, индексированных полей, полей
с ограничением CHECK или внешних ключей. Необходимо вначале удалить их, а после изменения схемы
сопоставления заново создать. Так что работа здесь может быть проделана большая и серьезная. Как вы смогли убедиться - выбор схемы сопоставления может существенно повлиять на работу по сопровождению и разработке серверных решений. Поэтому необходимо определится с оптимальным выбором схемы collation на начальном этапе в соответствии с требованиями существующих приложений и стратегией развития системы в целом. Статьи на русском языке
Data Sharing in a Heterogeneous Database Environment Самые популярные темы недели
ХП против View
Enforce Distributed transaction |
Вопросы, предложения, коментарии, замечания, критику и т.п. оставляйте Виталию Степаненко и Александру Гладченко в форуме: Обсуждение рассылки
|
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.winsoft.sqlhelpyouself |
Отписаться |
В избранное | ||