Отправляет email-рассылки с помощью сервиса Sendsay

MS SQL Server

  Все выпуски  

MS SQL Server - дело тонкое...


Информационный Канал Subscribe.Ru


#111<<  #112

СОДЕРЖАНИЕ

1.БЕЗОПАСНОСТЬ
1.1.Лекарство от страха
2.СОВЕТЫ
2.1.Повышение эффективности за счёт использования подсказок оптимизатору
2.1.1.Введение
2.1.2.Использование хинта Index
2.1.3.Хинт порядка объединения
2.1.4..Хинт nolock для таблиц
2.1.5.Заключение
3.ССЫЛКИ НА СТАТЬИ
3.1.Отечественные статьи
3.2.Новые технические статьи Microsoft
3.3.Англоязычные статьи
4.ФОРУМ SQL.RU
4.1.Самые популярные темы недели
4.2.Вопросы остались без ответа

БЕЗОПАСНОСТЬ

Лекарство от страха

Вы можете устранить некоторые уязвимости, о которых сообщалось в 109 выпуске рассылки. Как Вы помните, уязвимости оказалась подвержена системная хранимая процедура sp_Mssetalertinfo, которая используется для настройки оповещений SQL Server. В принципе, изменение параметров оповещений нельзя считать уязвимостью, но злоумышленник может использовать такую возможность для маскировки атаки. Например, им может быть заблокирована возможность выдачи оповещений для DBA или эти оповещения могут быть переадресованы на другой адрес. С помощью этой процедуры хакер имеет возможность изменить следующий набор параметров: AlertFailSafeOperator, AlertNotificationMethod, AlertForwardingServer, AlertForwardingSeverity, AlertPagerToTemplate, AlertPagerCCTemplate, AlertPagerSubjectTemplate, AlertPagerSendSubjectOnly, AlertFailSafeEmailAddress, AlertFailSafePagerAddress, AlertFailSafeNetSendAddress, AlertForwardAlways. Сделать это злоумышленник может потому, что по умолчанию, группе public базы данных master предоставлено разрешение на EXECUTE для sp_MSsetalertinfo. Т.е. зарегистрировавшись гостем любой пользователь может запустить на исполнение эту процедуру.
То же самое можно сказать и об другой системной хранимой процедуре sp_ MSSetServerProperties. Аналогичным способом хакер может изменить параметры запуска SQL Server, чтобы, например, запретить автоматический запуск сервера.
Для того, что бы устранить указанные выше уязвимости, необходимо с помощью команды REVOKE отменить разрешение на EXECUTE для группы public базы данных master, например так:


use master
go
REVOKE EXECUTE ON master.dbo.sp_MSSetServerProperties FROM public
go
REVOKE EXECUTE ON master.dbo.sp_MSsetalertinfo FROM public
go

[Содержание]

СОВЕТЫ

Повышение эффективности за счёт использования подсказок оптимизатору
По материалам статьи Robert Marda: Performance Adding Hints

Введение

Во время анализа возможностей повышения эффективности исполнения запросов и хранимых процедур Вы можете обнаружить, что план их исполнения, выбранный SQL Server, не является наиболее лучшим планом. Часто, небольшие изменения в структуре базы данных и/или запроса исправляют эту проблему. Но бывает, когда такие Ваши действия не приводят к тому, что оптимизатор SQL Server будет выбирать лучший путь исполнения вашего кода. Это тот самый случай, когда подсказки (Hints или хинты) могут помочь повысить эффективность исполнения запроса. Хинты сообщают SQL серверу, чтобы он исполнял некоторые части Вашего SQL-запроса тем путём, которым Вы считаете лучшим.
Есть много вещей, которые влияют на то, как SQL Server выполняет SQL-запросы. Среди них: первичные ключи (или их отсутствие), индексы, объединения, число строк в таблицах, версия SQL Server, и аппаратные средства (один или более процессоров). Любое изменение у SQL Server может влиять на исполнение запроса или хранимой процедуры. Хинт, который Вы используете сегодня, из-за которого запрос выполняется пол секунды, может через несколько месяцев на том же самом запросе привести к его исполнению дольше 10 секунд. Это происходит потому, что Ваш SQL Server постоянно изменяется.
Как только Вы включаете в запрос хинты, SQL Server будет использовать их, даже если причина, из-за которой он выбирал худший план исполнения, исчезнет. В этой статье автор описывает использование некоторых хинтов, которые он считает полезными. Однако, он предостерегает Вас от не обдуманного использования хинтов, надеясь, что Вы будете использовать их только в случае крайней необходимости. Автор работал с SQL Server в течение приблизительно 3 лет, и использовал хинты только в трёх или четырёх хранимых процедурах из приблизительно 600, находящихся в промышленной эксплуатации.

Использование хинта Index

Подсказка оптимизатору использовать конкретный индекс полезна, когда необходимо вынудить SQL Server использовать именно этот индекс, и если именно с этим индексом повысится эффективность запроса. Использовать такой хинт лучшее, когда Вы точно знаете, что SQL Server не выбирает оптимальный для запроса индекс, и необходимо помочь SQL Server выбрать правильный индекс. В хинте нужно указать id индекса или его имя. Ниже представлен пример запроса, в котором подставляется id для одного индекса:


USE pubs
SELECT *
FROM authors WITH (INDEX(0))

Использование id равного 0, вынудит SQL Server использовать сканирование кластерного индекса, если он существует. Если кластерного индекса нет, тогда будет выполнено простое сканирование таблицы. Ниже представлен пример запроса, в котором вместо id используется имя индекса:


USE pubs
SELECT *
FROM authors WITH (INDEX(aunmind))

Хинт порядка объединения

Порядок объединения в SQL Server для каждой таблицы в предложении FROM, очень сильно влияет на то, как будут исполняться запрос или хранимая процедура. Объединение таблиц в неправильном порядке может существенно увеличить время исполнения запроса. Если Вы полагаете, что SQL Server выбрал не оптимальный порядок объединения таблицы, Вы должны найти лучший порядок объединения и указать его хинтом. Для представленных ниже двух небольших примеров будет полезно рассмотреть планы их исполнения, что бы увидеть порядок объединения таблиц, выбранный SQL сервером в обоих случаях. Вы можете посмотреть планы в Query Analyzer или щёлкнуть по соответствующей ссылке, указанной ниже в этом разделе. Первый запрос показывает то, что получается, когда таблицы объединены не оптимально.

Запрос №1:


USE pubs
SELECT *
FROM titles t
INNER JOIN roysched r ON t.title_id = r.title_id
INNER JOIN titleauthor ta ON t.title_id = ta.title_id
OPTION (FORCE ORDER)

Теперь выполните второй запрос (который является тем же самым запросом, но без использования хинта).
Запрос №2:


USE pubs
SELECT *
FROM titles t
INNER JOIN roysched r ON t.title_id = r.title_id
INNER JOIN titleauthor ta ON t.title_id = ta.title_id

Когда хинт удалён из запроса, объединение таблиц будет выполнено в другом порядке. Порядок, который использует SQL Server без хинта, окажется лучше. Он начинается с таблицы titleauthor, которая объединяется с таблицей titles. После этого следует объединение с таблицей roysched с результатом объединения двух других таблиц.
Быстрым способом увидеть то, какой из представленных выше запросов работает быстрее, является исполнение их обоих в одном окне Query Analyzer, и совместное рассмотрение их планов исполнения. Так Вы увидите, почему второй запрос работает быстрее, чем первый.
Кликните по этой ссылке: План исполнения первого запроса
Кликните по этой ссылке: План исполнения второго запроса
Как Вы видите, в первом запросе join таблиц titles и roysched даёт в результате 86 записей. Эти 86 записей используются для следующего вложенного цикла с join. Тут мы имеем 123 записи, которые составляют результат, представленный ссылкой выше. Во втором запросе, первый join таблиц titleauthor и titles даёт уже в результате 25 записей. Кроме того, отсутствуют промежуточные шаги перед объединением с третьей таблицей из 25 записей, после чего получается результирующий набор из 123 записей.
Второй запрос выполнился быстрее, потому что он имеет дело с меньшим количеством строк. Число строк, которые были задействованы, сильно зависит от порядка объединения таблиц между собой. Это демонстрирует важность порядка объединения таблиц. SQL Server рассматривает довольно много влияющих на объединение факторов, перед тем, как определить, какой порядок оптимально использовать при объединении таблиц. Это обычно: число строк в таблице, первичные ключи, индексы, число процессоров и текущую загрузку сервера, а иногда только некоторые из этих факторов. Если SQL Server вдруг разместит таблицы для join в неправильном порядке, попробуйте исправить эту проблему, определив более оптимальный порядок, используя хинт порядка объединения.

Хинт nolock для таблиц

Хинт Nolock является единственным хинтом, который автор использует почти для каждой таблицы, используемой в запросах с SELECT в хранимых процедурах, которую он использует. Этот хинт позволяет запросу исполняться даже в то время, когда осуществляется модификация таблицы, по которой идёт выборка. Это позволяет делать то, что называется "грязным чтением" данных (Dirty Read). Этот термин используется когда говорят, что получаемые данные ещё не прошли фазу фиксации и могут быть возвращены в предыдущее состояние. Автор использует эту подсказку, чтобы избежать блокировок на его сайте. Одна из причин, по которой это является для него приемлемым, это то, что большинство модификаций, выполняемых на сайте, затрагивает только одну запись, так что количество незафиксированных просматриваемых данных бывает очень маленьким. Ниже представлен пример использования хинта Nolock:


USE pubs
SELECT *
FROM titles t WITH (NOLOCK)
INNER JOIN roysched r WITH (NOLOCK) ON t.title_id = r.title_id

Предложение WITH (Nolock) всегда помещается сразу после имени таблицы или её псевдонима.
Представленный ниже запрос демонстрирует, как Вы можете выбирать данные без хинта nolock и просматривать эти данных до того, как они будут зафиксированы при использовании хинта Nolock. Выполните следующий запрос в отдельном окне Query Analyzer:


USE pubs
BEGIN TRANSACTION
UPDATE titles SET title = 'UNCOMMITTED' + title

Этот запрос установит исключительную блокировку на таблицу titles из-за чего невозможно будет выполнять в ней изменения, пока Вы не выполняете команду COMMIT TRANSACTION. Теперь в другом окне Query Analyzer, подключившись к тому же серверу, выполните следующий запрос:


USE pubs
SELECT *
FROM titles

Не стесняйтесь прервать выполнение этого запроса, когда Вам надоест ждать результат. Вы его никогда не получите, пока Вы не закроете другое окно или не завершите модификацию, выполнив команду завершения транзакции. SQL Server не позволит Вам увидеть данные, пока эта операция не будет завершена или не откатиться назад, потому что по умолчанию будет предписана исключительная блокировка. Чтобы обойти это, Вы можете изменить ваш запрос, чтобы он выглядел следующим образом:


USE pubs
SELECT *
FROM titles WITH (NOLOCK)

Теперь Вы сможете увидеть всю titles с добавленным словом UNCOMMITTED вначале поля. Далее нужно перейти в первое окно, и напечатать ROLLBACK TRANSACTION, а затем исполнить только эту строку. После этого возвратимся в другое окно, и выполним запрос без хинта Nolock. Вы увидите поля без слова UNCOMMITTED. Если использование грязного чтения для Вас допустимо, тогда автор рекомендует использовать хинт Nolock, всюду где только можно. Это сократит число блокировок. Если грязное чтение недопустимо, тогда Вы никогда не должны использовать этот хинт.

Заключение

Использование хинтов в ваших запросах имеет смысл хотя бы потому, что Microsoft включил их использование в набор возможностей SQL Server. Однако, использование большинства хинтов должно быть ограничено, за исключением разве что хинта, который описан в третьем примере. Пытаться повысить эффективность с помощью хинта можно только тогда, когда не может быть найдено другое решение.

[Содержание]

ССЫЛКИ НА СТАТЬИ

Отечественные статьи

В поисках шестого чувства
Согласно исследованиям аналитиков, подавляющее большинство менеджеров проектов считают, что независимо от размеров и вида бизнеса автоматизированные методы управления проектами существенно повышают эффективность работы компании. Внедрение таких методов улучшает исследуемые показатели эффективности управления проектами почти на четверть, причем самые значительные сдвиги достигаются в оценках сроков реализации проектов, удовлетворении заказчиков и достижении стратегических планов компании. С другой стороны на пути реализации проектов менеджеров поджидает масса неожиданностей, постоянно грозящих перевести проект в категорию безнадежных. Данный выпуск журнала мы решили посвятить управлению ИТ-проектами, в котором вместе с вопросами универсальной методологии, общей для всех видов проектов: построение компьютерной модели, оценка рисков, организация работы исполнителей и т.п. разберем особенности функционирования конкретных систем...
Холодильники и хранилища данных
Завод холодильников «Стинол» в Липецке, построенный в начале 90-х компанией Merloni Projetti как один из цехов Новолипецкого металлургического комбината, в сентябре 2000 года был куплен корпорацией Merloni Elettrodomestici...
Распределенное управление проектами
Теория и практика управления проектами подчиняются тем же закономерностям, что и другие области ИТ, находящиеся на стыке между приложениями и пользователями и обеспечивающие доступ к ресурсам информационных систем...
Управление проектами с помощью Spider Project
Область автоматизации процесса управления проектами оказалась одной из тех немногих пока сфер ИТ-деятельности где отечественные разработчики предложили конкурентно способное решение...
Корпоративная система управления проектами
Проект — сегодня это звучит модно. Между тем, задачи современной компании уже выходят за рамки управления отдельными проектами. Сейчас появляется необходимость перехода на принципиально новый уровень корпоративного управления проектами, предполагающий неразрывную связь всех проектов ведущихся в компании по всем направлениям, от внутренних проектов расширения офисных площадей до крупных государственных заказов и международных проектов...
Экстремальное программирование и управление проектами
Результаты анализа состояния проекта часто могут помочь принять своевременное решение, способствующее успеху проекта...
Во власти скриптов
Сегодня много говорится о модели разработки ПО с открытыми исходными текстами (Open Source), однако, как правило, речь идет о бизнес-модели распространения таких программ, а не о процессе его создания...
Моделирование квазиструктурированных данных
Задачи обработки информации с нечетко определенной структурой возникают сегодня практически повсеместно...
Спецификация каркаса информационной системы с распределенной архитектурой
Полученную мною спецификацию каркаса системы с распределенной архитектурой (distributed framework - dfw) можно использовать как отправную точку при создании корпоративных распределенных систем. Предлагаемая спецификация не зависит от распределенной технологии, на основе которой будет построена система. Другими словами, предлагаемая спецификация может быть использована совместно с технологиями RMI, CORBA, DCOM и др. Проблемы реализации интеграции с этими технологиями не рассматриваются. Они ложатся на разработчиков, решивших использовать эту спецификацию. Спецификация была получена при анализе трех типов систем: OLTP, OLAP и GIS. Каркас системы направлен на объектно-ориентированный язык и в основе своей содержит набор шаблонов проектирования для высокого повторного использования...
NTFS и FAT: скорость
Прочитав данный материал, вы получите информацию для размышлений и сможете сами сделать выводы, понять, какая система будет быстрее в ваших условиях, и почему. Возможно, некоторые факты помогут вам также оптимизировать быстродействие своей машины с точки зрения файловых систем, подскажут какие-то решения, которые приведут к повышению скорости работы всего компьютера. В данном обзоре упоминаются три системы - FAT (далее FAT16), FAT32 и NTFS, так как основной вопрос, стоящий перед пользователями Windows2000 - это выбор между этими вариантами. Я приношу извинение пользователям других файловых систем, но проблема выбора между двумя, внешне совершенно равнозначными, вариантами со всей остротой стоит сейчас только в среде Windows2000. Я надеюсь, всё же, что изложенные соображения покажутся вам любопытными, и вы сможете сделать какие-то выводы и о тех системах, с которыми вам приходится работать...
Подключение к базе данных с помощью JDBC
Подключение Java-программы к реляционной СУБД с помощью JDBC выполняется в три этапа...

[Содержание]

Новые технические статьи Microsoft

HOW TO: Create a Data Transformation Services Custom Task by Using Visual C# .NET
HOWTO: Get a Record Count from a SQL Server CE Recordset
INF: How to Determine When Unattended SQL 7.0/MSDE 1.0 Setup is Complete
INF: SQL Server 2000 Security Update for Service Pack 2
INF: SQL Server 7.0 Security Update for Service Pack 4
INF: Use the "-SkipErrors" Parameter in Distribution Agent Cautiously
PRB: SQL Server 2000 Installation Fails with "...previous program installation..." Error Message
PRB: The CryptoAPI Function Generates an Error When You Try to Connect to an Instance of SQL Server 2000

[Содержание]

Англоязычные статьи

Adding Linked Servers Using SQL-DMO
Andy Warren
A few weeks ago we had a question about how to work with linked servers using DMO (posted by Brian Lockwood of LockwoodTech Software) that turned out to be more work than I thought it would be, though for reasons having more to do with linked servers in general than anything to do with DMO!
Use SQL Server Triggers to Track Unauthorized Database Changes
Susan Sales Harkins and Arthur Fuller
SQL Server triggers are a powerful feature, yet they often take a backseat to stored procedures and user-defined functions-a fate they don't deserve. A trigger can provide an easy-to-implement solution to even the most complicated problem. One task in particular, tracking unauthorized changes in a database, can be transformed from a lengthy and difficult security task to a automated routine with the use of triggers. The secret is to store data about each change as it occurs, so you can determine who's changing data and when. The results of this tracking will help you determine whether a data change is a simple mistake in reporting, an unintentional mistake by an honest employee, or a real security hole that needs filling
Microsoft SQL Server Passwords (Cracking the password hashes)
David Litchfield
David Litchfield does it again! In SQL Server eXTRA #107 we lauded David for unearthing another, more serious security flaw in SQL Server.

[Содержание]

ФОРУМ SQL.RU

Самые популярные темы недели

Симпатичная блондинка ищет общения с умными Гуру
Своя книга по MS SQL Server 2000
Новость No.2 - FTP SQL.RU
Кто вызвал процедуру?
Книга по SQL [new]
RAID
Как узнать роли пользователя по логину Windows NT? [new]
Сравнение двух одинаковых таблиц...
Вложенные ХП [new]
Помогите составить запрос: Распределение сумм оплат по поставкам
exec и временные таблицы
Кто тупее - я или триггер?
Рухнул винт с файлом SQL 7.0 (mdf),пустой, можно ли восстановить остальное? [new]
Пропал connect с MS SQL 7 у всех юзеров !!!!!!!!!!!
Проблема с блокировкой??
SQLServerAgent умер
Помогите настроить почту, плиссс.
? к сишникам. Никто не знает есть ли библ-ки для работы с 200-значными числами?
можно ли перевести дату с MySQL на MSSQL ?
Не уже ли в 200 раз?
Хранимые процедуры
Несколько триггеров для одной операции или один?
1С+SQL
Большие объемы данных
Пронумеровать записи запроса [new]
Двоиники
Что гуру все вымерли?

[Содержание]

Вопросы остались без ответа

с OLE DB конект к не получается SQL Server на другом компе.
Очереди
Как увеличить время ожидания блокировки ?
Возможность среплицировать оракловую таблицу
Слетела база...
Люди помогите !!!!!!!! Кто знает??
Работа для программиста Delphi под SQL
NetIQ
уже стерли Glory
News! Поиск по форуму.
восстановление базы с другой кодировкой
Помогите чайнику (sp_CrossTab)
Дерево каталогов исходных файлов для SQL Server 2000

[Содержание]

#111<<  #112

Вопросы, предложения, коментарии, замечания, критику и т.п. присылайте Александру Гладченко на адрес: mssqlhelp@pisem.net

sql.ru Описание рассылки

МИНИФОРМА
ПОДПИСКИ




http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное