1 / 60

Certified for и партнерские программы Microsoft

Certified for и партнерские программы Microsoft. Алексей Шуленин Microsoft Департамент стратегических технологий Эксперт по технологиям обработки и анализа информации. Совместимость. Партнерские программы, ориентированные на SQL Server

maille
Download Presentation

Certified for и партнерские программы Microsoft

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Certified for • и партнерские программы Microsoft Алексей ШуленинMicrosoftДепартамент стратегических технологийЭксперт по технологиям обработки и анализа информации

  2. Совместимость • Партнерские программы, ориентированные на SQL Server • Каким формальным критериям необходимо удовлетворить для соответствия программе Works with Microsoft SQL Server 2008 • Как им удовлетворить

  3. Партнерство с Microsoft • https://partner.microsoft.com/rus/program/programoverview

  4. Партнерские баллы • Положение организации в партнерской программе Microsoft определяется кол-вом заработанных ею партнерских баллов • Система баллов обеспечивает измеряемый индекс, по которому можно быстро судить о состоянии партнера в программе и необходимых ему шагах, чтобы двигаться вверх

  5. Партнерские программы с SQL Server

  6. Программа Certified for SQL Server • Создана под SQL Server 2005 • Выполняется VeriTest’ом (sqlcert@veritest.com) • Протестировать свое SQLное приложение у них стоит $10 тыс. • Плата за каждый доп.день тестирования $1850 • Программа приносит 50 партнерских баллов, если приложение удовлетворяет обязательным требованиям • Кроме того, есть т.н. Elective Features, за к-е начисляются доп.баллы • Опубликовав 3 customer reference profiles, ISV получает компетенцию ISV / Software Solution Competency • см. https://partner.microsoft.com/rus/program/competencies

  7. Тест Works with Microsoft SQL Server 2008 • Необходим по двум причинам • Элективная составляющая Platform Test for ISVs • Дает право на маркетинг партнерского решения в solution briefвместе с Microsoft

  8. Platform Test for ISVs • Обязательная часть (Foundation Test Components) • Windows Server 2008: $250  • После 31.12.2009 будет заменен R2 • Windows Client: $400 • Элективная часть • SQL Server 2008: $250* • Office 2007: $400  • Office 2003: $400  • Web Services plus .NET Framework: $400  • Managed Code: $400 • *При выборе вместе скидка $100 • Каждый тест приностит 10 партнерских баллов • При условии, что пройдены тесты как из обязательной, так и элективной части

  9. Microsoft SQL Server 2008 Solution Brief • Платим $350 и попадаем в виде странички в Solution Brief - Microsoftовскийсборник историй успеха, который будет раздаваться worldwide • Сейчас действует скидка в полцены - $175 • http://www.lionbridge.com/lionbridge/en-US/services/software-product-engineering/testing-veritest/product-certification-services/microsoft/works-with-sql-server-2008/solution-brief.htm

  10. Требования программы • Требования, которым необходимо удовлетворить для прохождения «Works with Microsoft SQL Server 2008» • http://www.lionbridge.com/certification/Works-With-SQL-Server-2008-Specifications.doc • Существует два способа прохождения этого теста • Отправить ваше приложение в VeriTest и заплатить, чтобы протестировали • Протестировать самостоятельно • Если нет лишних денег, правильней выбирать его, т.к. требования, в общем, достаточно примитивные

  11. Тестировочная тула • Берется здесь • http://www.innovateon.com/pageLayout.aspx?pageID=sql_2008_test • Клиент должен быть • Windows Vista Business SP1 (x86 или x64) • Windows XP(SP - ?) • Сервер - стоять на • Windows Server 2008 Edition(x86 или x64) Windows Server 2003 Enterprise Edition SP2 (x86 или x64) • Допускаются все редакции SQL Server 2008 c Enterprise по Express

  12. Как тестируем • Простая визардоподобная оболочка • Последовательность действий • Выбрать new test, запустить • Указать ехешник своего приложения • Если сервис - ехешник сервиса • Если веб-приложение - w3wp.exe (IIS 7.0, 6.0) • Убедиться, что только тестируемое приложение работает в данный момент, т.к. все приложения будут под одним Process ID • Если многоуровневое, тестируется каждое звено • Запустить приложение и выполнить в нем какие-либо операции с базой • Завершить тест, получить отчет • Отчет является подтверждением прохождения теста • Либо, в случае выявленных несовместимостей там, как при прохождении ТО, указывается, что подправить • Проверяет 6 сценариев на совместимость

  13. Предупреждение • Под совместимостью с SQL Server 2008 будем понимать действия, которые требуется совершить для успешного прохождения теста Works with Microsoft SQL Server 2008 • В их нынешнем виде эти требования вызывают, мягко говоря, недоумение • От 2008-го в них присутствуют только строка соединения и ROW COMPRESSION (да и то последнее - опционально) • Никакие другие интересные новшества 2008-го (Page Level Compression, Backup Compression, sparse columns, filtered indexes, Resource Governor, Filestream, Geospatial, TDE, EKM, аудит, политики DMF, CDC, Change Tracking, Date/Time, Merge, GroupingSets, ... ) в требования не попали • Остальные требования относятся, в основном, к безопасности, да и то однобоко • Напр., xp_cmdshellc sa запрещаем, а про xp cunsafe assemblies ничего не говорим • Складывается впечатление, что составители не вполне представляли предметную область • Однако разумность и полноту выносим за скобки • Действуем строго формально

  14. Сценарий 1 • Приложение должно использовать интегрированную систему безопасности (integrated security) - Windows Authentication - для соединения с SQL Server 2008 и компонентами сервера • Данное требование повышает безопасность и управляемость приложений. Использование интегрированной системы безопасности позволяет осуществить подключение уникальных пользователей, определенных на уровне AD • ADподдерживает централизованное управление политиками, например, политики управления паролями, что позволяет, например, централизованно отключать пользовательские записи, блокируя доступ пользователей ко всем базам данных. • Помимо, Windows Authentication использует более безопасные протоколы аутентификации по сравнению с SQL Authentication (особенно в тех случаях, когда используется Kerberos) • Если использование Windows Authentication невозможно по каким-либо причинам, следует использовать опцию SQL Server Authentication с поддержкой Enforce Password Policy и Password expiration, что гарантирует использование сложных паролей • Пароль является одним из самых уязвимых компонентов системы безопасности – следование перечисленным выше требованиям позволит существенно обезопасить как само приложение, так и данные

  15. Сценарий 1 declare @LoginMode int exec master.dbo.xp_instance_regreadN'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', @LoginMode OUTPUT select @LoginMode --1 - Windows --2 - Mixed

  16. Сценарий 1 select is_policy_checked, is_expiration_checked from sys.sql_logins where name = 'sa‘ alter login sa with check_policy = ON, check_expiration = OFF

  17. Сценарий 2 • Подключаемые к SQL Server 2008 учетные записи не должны входить в серверную роль sysadmin --Кто входит в роль? select p2.name, p2.type_desc from sys.server_role_members rm join sys.server_principals p1 on rm.role_principal_id = p1.principal_id join sys.server_principals p2 on rm.member_principal_id = p2.principal_id where p1.name = 'sysadmin'

  18. Сценарий 2 if exists(select * from sys.server_principals where type_desc = 'SQL_LOGIN' and name = 'xxx') drop login xxx create login xxx with password = 'SQL.NET Architecture Day', default_database = tempdb, check_policy = on, check_expiration = off exec sp_addsrvrolemember @loginame = 'xxx', @rolename = 'sysadmin' exec sp_helpsrvrolemember @srvrolename = 'sysadmin' exec sp_dropsrvrolemember @loginame = 'xxx', @rolename = 'sysadmin' exec sp_helpsrvrolemember @srvrolename = 'sysadmin' • Добавление/отлучение от роли

  19. Сценарий 2 • Не используйте учетную запись SA как учетную запись по умолчанию для вашего приложения. Создайте новую учетную запись и задайте для нее необходимые привилегии • Лучше вообще sa от греха задисейблить alter login sa disable alter login sa enable

  20. Сценарий 3 • Должна быть включена трассировка по умолчанию (default trace) • Данное требование позволяет постоянно мониторить производительность приложений за счет сбора данных о работе приложения и базы данных SQL Server • Файлы трассировки содержат ценную информацию, позволяющую быстро определить источник сбоев и ликвидировать его • Посмотреть, какие трассы запущены на сервере в наст.момент, можно T-SQLным способом: • select * from sys.traces • Имеется также функция fn_trace_getinfo(), к-я возвращает информацию о трассе по ее id; 0 - для всех трасс • Небольшая вариация с осмысленными значениями свойств: with cte(TraceID, TraceOption, FileName, MaxSize_MB, StopTime, IsRunning) as (select * from ::fn_trace_getinfo(0) pivot (min(value) for property in ([1], [2], [3], [4], [5])) pt) select TraceID, case TraceOption when 2 then '2 = TRACE_FILE_ROLLOVER' when 4 then '4 = SHUTDOWN_ON_ERROR' when 6 then '6 = ROLLOVER_AND_SHUTDOWN' when 8 then '8 = PRODUCE_BLACKBOX' else TraceOption end, FileName, MaxSize_MB, StopTime, IsRunning from cte

  21. Сценарий 3 • В отличие от обычной трассы, запуск, останов и удаление которой выполняются процедурой exec sp_trace_setstatus @traceid = <id трассы>, @status = 1 (старт), 0 (стоп), 2 (убить) • Дефолтную трассу можно только заенейблить или задисейблить при помощи execsp_configure'default trace enabled‘ • Дефолтную трассу нельзя поменять, изменив в ней список отслеживаемых событий или колонок по событию (sp_trace_setevent)или фильтров на события (sp_trace_setfilter) • Msg 19070, Level 16, State 3, Procedure sp_trace_setfilter, Line 1 • The default trace cannot be stopped or modified. Use SP_CONFIGURE to turn it off. • Можно только посмотреть ее состав: • аналогично - select * from ::fn_trace_getfilterinfo(default) select f.eventid, e.name as EventName, e.category_id, cat.name as EventCategoryName, f.columnid, c.name as ColumnName from ::fn_trace_geteventinfo(1) f inner join sys.trace_events e on f.eventid = e.trace_event_id inner join sys.trace_categories cat on e.category_id = cat.category_id inner join sys.trace_columns c on f.columnid = c.trace_column_id

  22. Сценарий 3 • Подробнее про то, что такое дефолтная трасса и для чего она нужна, можно прочитать в статье Kalen Delaney - http://www.sqlmag.com/Articles/ArticleID/48939/pg/1/1.html • Либо скупое упоминание в BOL: http://msdn.microsoft.com/ru-ru/library/ms175513.aspx

  23. Сценарий 4 • The application should be able to connect successfully • Basic Requirement for Works With SQL Server 2008 test • Без комментариев 

  24. Сценарий 5 • xp_cmdshell должна быть выключена • Данное требование направлено на запрет выполнения системных команд из кода на Transact SQL, что существенно снижает вероятность доступа к системных ресурсам из вредоносного кода, расположенного в базе данных. • Проверка текущего состояния • select value from sys.configurations where name = 'xp_cmdshell‘ • Запрет • exec sp_configure 'show', 1 • reconfigure with override • exec sp_configure 'xp_cmdshell', 0 • reconfigure with override

  25. Сценарий 6 • Объекты таблиц и индексов, создаваемыe прикладной программой, должны использовать ROW Level сжатие. • Данное требование является опциональным, но крайне рекомендуемым к использованию. • Поддержка данного требования может увеличить производительность системы и улучшить использование системных ресурсов (например, сократить место на диске). Производительность системы в этом случае зависит от производительности подсистемы ввода/вывода – именно поэтому данное требование является опциональным. • Демо на сжатие • DataCompression.sql

  26. Миграция: предисловие • Я постараюсь рассказать о: • Вариантах перехода, методике, инструментах и планировании • С фокусом на реляционную часть SQL Server • Технических и не очень аспектах перехода • Часто встречающихся проблемах, ошибках и мифах • Я не планирую рассказывать о: • Полном перечне всех возможных проблем миграции • Полном перечне нововведений в SQL Server 2008– пожалуйста спрашивайте, тем не менее  • Для лучшего усвоения желательно: • Иметь некоторую практику работы с SQL Server 2000/2005 • Иметь базовые знания о SQL Server 2008

  27. Конфигурация демонстрационной среды • Windows 7 Ultimate • Visual Studio Team System 2008 + SP1 • Microsoft® Visual Studio Team System 2008 Database Edition GDR R2 • Это SQL2008 DB Project Template for VS2008 • http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&displaylang=en • SQL Server 2008 R2 CTP2 • Просто SQL Server 2008 в чистом виде не встает на Windows 7 • Необходимо ставить слипстримнутый с SP1 релиз • Как сварить, объясняется здесь: http://blogs.msdn.com/petersad/archive/2009/02/25/sql-server-2008-creating-a-merged-slisptream-drop.aspx • Готовить его времени не было, а R2 все равно выкачивался к ISV Innovation Day • http://technet.microsoft.com/en-us/evalcenter/ee315247.aspx • Ставился дефолтным инстансом

  28. Конфигурация демонстрационной среды • SQL Server 2005 Developer Edition • Встает на Windows 7 со всем вышеперечисленным без сучка и задоринки • Единственно прикалывает распознавание 10.5 то как семерки, то как 2000  • Но по-серьезному это ни на что не влияет • Поставлен именованым инстансом (Yukon)

  29. Конфигурация демонстрационной среды • SQL Server 2005 SP3 • http://www.microsoft.com/downloads/details.aspx?FamilyID=ae7387c3-348c-4faa-8ae5-949fdfbe59c4&displaylang=en • Adventure Works Sample Database for SQL Server 2005 SP2a (case insensitive) • http://msftdbprodsamples.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=4004#DownloadId=11754 • Microsoft SQL Server 2008 Upgrade Advisor • http://www.microsoft.com/downloadS/details.aspx?familyid=F5A6C5E9-4CD9-4E42-A21C-7291E7F0F852&displaylang=en • RML Utilities for SQL Server • http://www.microsoft.com/downloads/details.aspx?FamilyId=7EDFA95A-A32F-440F-A3A8-5160C8DBE926&displaylang=en • В част., ReadTrace

  30. Общий обзор подхода • Зачем мигрировать? Убедить начальство  • Microsoft в помощь - http://www.microsoft.com/sqlserver/2008/en/us/why-upgrade.aspx • Анализ окружения • Требования к миграции • Выбор редакции • Требования к оборудованию • Использовать Upgrade Advisor • Исправить найденные несоответствия • Выполнить тестирование на совместимость • По возможности 100% тестирование кода • Перед миграцией • Подробная документация на существующую систему • Разработка тестов проверки, стресс тестов и снятие базовой линии производительности • Сформулировать и проверить план отката • Определитьсяс подходом в миграции • In-place или side-by-side • Собственно миграция • Предмиграционные работы • После миграции • Вот тут-то на самом деле все и начинается 

  31. Что поддается миграции? • Компоненты • Реляционный движок • Включая суб компоненты такие как SQL Agent, Tools, и.т.д. • В дальнейшем именно на нем будем фокусироваться • Full-text Search • Reporting Services • Analysis Services • Data Transformation Services / SSIS • Редакции • Express, Developer, Workgroup, Standard, Enterprise • Платформы • 32-bit & 64-bit (IA64 и x64) • Языки и сортировки • SQL Server 2008 имеет новые сортировки (для соответствия Windows) • select * from ::fn_helpcollations() where name like '%100%‘

  32. Варианты миграции: • In-Place (замещение) • Обновление существующей инсталляции при сохранении пользовательских данных • Имя экземпляра после миграции остается прежним • Старый экземпляр перекрывается новым (исчезает) • Практически 100% автоматический процесс • Включая кластерную установку • Side-by-side (Параллельная установка) • Ставится новый экземпляр SQL Server • Объекты БД переносятся между экземплярами вручную • Copy Database Wizard • Не копирует extended procs, alerts, DTS packages, linked servers. • Detach -> Copy -> Attach • Backup -> Restore • T-SQL Scripts, BCP, Break SAN mirror -> attach • Новый и старый миры сосуществуют бок о бок • Это может быть жизнь на том же сервере (именованный экземпляр) или на другом сервере • Процесс в основном ручной

  33. Как выбрать: замещение или параллельная установка? • Критичность приложения и его сложность • Критичные приложения не обязательно сложны, но имеют жесткие ограничения по тестированию, размерам админ. окна,… • Сложные приложения не обязательно критичны, но требуют интенсивного тестирования и можно столкнуться со сложным откатом • Практические соображения • Размер БД и число объектов • Локальные задания по сопровождению • Длительность допустимого простоя • Аппаратные возможности/возраст серверов • Зависимость от системы и других приложений • Время, необходимое на откат и усилия на это потребные • Возможные требования к параллельному исполнению • C какой версии/редакции на какую поддерживается апгрейд • http://msdn.microsoft.com/en-us/library/ms143393.aspx • Понятно, что при параллельной установке мы можем мигрировать базу хоть на Access;главное, чтобы поддерживалась нужная функциональность

  34. Перенос данных • Говорить об отдельном переносе данных имеет смысл в случае side-by-side миграции • Перенос резервной копии базы • Делай раз: alter database ... set read_only with rollback immediate (или SINGLE_USER) • Делай два: бэкап • Делай три: переносим резервную копию на назначение • Делай четыре: восстанавливаемся на назначении из резервной копии • Делай пять: переводим базу в режим совместимости с 2008 (10), отпускаем многопользовательский доступ • Примечание раз: логины вместе с базой не переносятся, т.к. являются объектами уровня сервера • Можно заскриптовать отдельно на источнике и выполнить скрипт на назначении • Можно воспользоваться Transfer Logins Task в SSIS • В случае интегрированной безопасности окружение назначения должно уже иметь соответствующие записи в AD • Осиротевшие SQLные юзеры базы лечатся при пом. sp_change_users_login (к-я явл-ся deprecated ;)) • Примечание два: перед тем, как открывать базу пользователям, по ней стоит выполнить стандартные процедуры поддержки: checkdb, обновл-е статистики, ... • Примечание три: с полнотекстовыми индексами лучше не возиться с переносом. Из-за изменений в движке iFTS 2008 их проще перестроить. • Демо (показывается на примере 2005, аналогично для 2000) • Отсоединение / присоединение базы

  35. Совместимость вниз • Часть функционала отмерла, часть приговорена, часть просто не рекомендуется • См. замечательный по ясности пост http://social.msdn.microsoft.com/Forums/en/sqldocumentation/thread/899f6b8c-165b-45ff-ad2b-6bd77e6dfdd6 • Заглавная страница в документации – SQL 2008 Backward Compatibility • http://msdn.microsoft.com/en-us/library/cc280407.aspx • Discontinued - no longer in this release of SQL Server. • Перечислены в BOL (http://msdn.microsoft.com/en-us/library/ms144262.aspx) • Deprecated - in this release, but no longer being developed or supported. Will be discontinued in the next release or two. • Перечислены в BOL (http://msdn.microsoft.com/en-us/library/ms143729.aspx) • Obsolete - a better alternative is available so this is now deemed redundant. Will probably be discontinued in the next release. • Понятно, что в списках не значатся недокументированные команды • Они на то и недокументированы, чтобы исчезнуть без предупреждения в любой момент • Как всегда, dbcc traceon(2588); dbcc help('?'), чтобы посмотреть оставшиеся • Аналогично, появиться • Список недокументированных команд, добавленных в 2005 – см. http://mssqlonline.blogspot.com/2007/04/dbcc-commands-introduced-in-sql-server.html • Выполните функциональное тестирование, чтобы поймать пропущенное Upgrade Advisor • Не все приложения нуждаются в полноценной проверке. Реальные по требности зависят от критичности/сложности приложения • Как мы помним, критичность <> сложности и наоборот

  36. SQL Server 2008 Upgrade Advisor • Берется здесь - http://www.microsoft.com/downloadS/details.aspx?familyid=F5A6C5E9-4CD9-4E42-A21C-7291E7F0F852&displaylang=en • Занимает < 10 MB

  37. SQL Server 2008 Upgrade Advisor • После выбора компонент указываем имя экземпляра • В кач-ве входа воспринимает одну или несколько БД, файл трассы, скрипт SQL • Применяет к ним проверку заложенного в него набора правил совместимости

  38. SQL Server 2008 Upgrade Advisor • Дополнительно к AdventureWorks_2005 был задан следующий скрипт, специально наполненный неподходящими командами (см. слайд «Совместимость вниз») • Демо ->DeprecatedIn2008.sql /* Скрипт, содержащий нормальные команды для SQL Server 2005, но криминальные с точки зрения SQL Server 2008 */ --Не поддерживаемые более: use tempdb backup log AdventureWorks_2005 with truncate_only use AdventureWorks_2005 if exists (select 1 from sys.database_principals where type = 'R' and name = 'Test') exec sp_dropgroup @rolename = 'Test' exec sp_addgroup @grpname = 'Test' --Deprecated, т.е. в 2008 поддерживаются, но в след.версии - не факт: select databaseproperty('AdventureWorks_2005', 'Version') --будет заменена на databasepropertyex exec sp_dboption @dbname = 'AdventureWorks_2005', @optname = 'trunc. log on chkpt.', @optvalue = 'true' --sp_dboption в целом заменяется командой alter database; в данном случае действие эквивалентно ALTER DATABASE ... SET RECOVERY SIMPLE select * from Production.Product with (fastfirstrow) --хинт заменен на OPTION (FAST N) select * from Production.Product order by Name collate SQL_AltDiction_CP1253_CS_AS select * from Production.Product p, Production.ProductSubcategory sc, Production.ProductCategory c where p.ProductSubcategoryID *= sc.ProductSubcategoryID and sc.ProductCategoryID *= c.ProductCategoryID --заменен на синтаксис ANSI left/right outer join declare @t table (fld1 text, fld2 image) --замена на varchar/varbinary(max) declare @db_id int, @tbl_id int; select @db_id = db_id(), @tbl_id = object_id('Production.Product'); dbcc pintable(@db_id, @tbl_id)

  39. SQL Server 2008 Upgrade Advisor • Генерируется отчет с найденными несовместимостями • Как мы видим, не все несовместимости в него попадают даже из тех, что перечислены в BOL • Напр., спокойно отнеслась к типам text/image, ...

  40. Другие способы выявления несовместимостей • SQL 2008 ставит большой набор счетчиков, отслеживающих устаревшие конструкции языка • select * from sys.dm_os_performance_counters where object_name like '%deprecated%' • sys.sysperfinfo – deprecated  • Делаем в Perfmon сбор всех этих счетчиков и запускаем типовую нагрузку

  41. Использование счетчиков несовместимости Perfmon • Создайте трассу в Perfmon • Перезапустите SQL Server 2008 для обнуления показателей

  42. Использование счетчиков несовместимости Perfmon • Прогоните шаг за шагом вторую (Deprecated) часть скрипта DeprecatedIn2008.sql и наблюдайте, как прирастают счетчики

  43. Использование счетчиков несовместимости Perfmon • Контролировать кол-во выявленных несовместимостей вы можете непосредственно из SQLного скрипта при помощи вышеупомянутого DMV • Выполните в кач-ве примера скрипт • select * from sys.dm_os_performance_counters where instance_name = 'Data types: text ntext or image' • go • declare @t table (fld1 text, fld2 image) • go • select * from sys.dm_os_performance_counters where instance_name = 'Data types: text ntext or image‘ • и обратите внимание, как приросло значение счетчика • Обратите также внимание, что Upgrade Advisor изначально не ловил эту несовместимость • PS. (Не по делу) Как вы объясните два одинаковых спида на картинке?

  44. Особенности предыдущего способа • AS. Правильно. Изначально SQLQuery3 имел другой спид. Но перед его выполнением был сделан рестарт SQL Server. Первой закладке Change Connection еще не успел быть сделан. • Действует аккуратнее по сравнению с Upgrade Advisor • Данные счетчики ставит SQL Server 2008, 2005 про них не знает • Следовательно, выполнять типовую нагрузку надо уже после переноса кода на 2008 • Discontinued вещи в этом случае просто не пойдут, отлавливать можно только те, что все еще поддерживаются, но не рекомендуются • Нельзя фильтровать по конкретной нагрузке • Способ только сообщает, что выявлена такая-то несовместимость, но ничего не говорит, в каком месте • Нужно самому лазить по коду и ее выискивать • Может рассматриваться в качестве финальной проверки на вшивость после того, как все найдено и пофиксено

  45. Как же все-таки отыскать, где собака порылась? • Известны два способа: 1) профайлер; 2) XEvents • Первый элементарен • Откройте профайлер и отметьте события в категории Deprecation • Deprecation Announcement event class • Deprecation Final Support event class • Отметьте также событие в категории T-SQLSQL:BatchCompleted и в категории Stored Procedures RPC:Completed, SP:Completed, SP:StmtCompleted • Остальные можно не выбирать, чтобы не зашумлять картины • Запустите трассу • Выполняйте шаг за шагом вторую часть скрипта DeprecatedIn2008.sql из предыдущей демы • Наблюдайте, как несовместимости отлавливаются в профайлере

  46. Расширенные события • Новая фича SQL Server 2008 • Использует механизм ETW, при помощи которого SQL Server сообщает наружу о происходящих внутри него событиях • Подробнее можно посмотреть в моем блоге • http://blogs.msdn.com/alexejs/archive/2009/09/07/sql-server-etw-4.aspx • http://blogs.msdn.com/alexejs/archive/2009/09/06/sql-server-etw-3.aspx • http://blogs.msdn.com/alexejs/archive/2009/09/04/sql-server-etw-2.aspx • http://blogs.msdn.com/alexejs/archive/2009/09/04/sql-server-etw-1.aspx • Выводим все доступные события независимо от пакета • select xp.name, xo.* from sys.dm_xe_objects xo • join sys.dm_xe_packages xp on xp.guid = xo.package_guid • where xo.object_type = 'event' • order by xp.name, xo.name • И замечаем среди них в пакете sqlserver все те же знакомые deprecation_announcement и deprecation_final_support

  47. Расширенные события • Какую информацию (какие колонки) они о себе несут? • select * from sys.dm_xe_object_columns where object_name in ('deprecation_announcement', 'deprecation_final_support') • Очень обнадеживающе выглядят feature и message, вы не находите? • Какие доп.колонки можно к ним еще подвязать? • Выполните запрос с пред.слайда, только object_type поставьте = ‘action’ • sql_text, tsql_stack, session_id, username, plan_handle – кто и чем нарушил совместимость

  48. Расширенные события • В какие места (targets) могут поступать эти события? • Выполните тот же самый запрос, только object_type поставьте = ‘target’ • Напр., asynchronous_file_target пишет информацию о событиях в файл, ring_buffer – в память, etw_classic_sync_target отдает SQL Serverному ETW-провайдеру и т.д. • Доп.информация – см. http://msdn.microsoft.com/en-us/library/dd822788.aspx

  49. Расширенные события • Теперь все готово, чтобы запустить сессию сбора событий select DB_ID('AdventureWorks_2005') if exists(select 1 from sys.server_event_sessions where name = 'Deprecat') drop event session Deprecat on server go create event session Deprecat on server --будем собирать два выбранных события add event sqlserver.deprecation_announcement (action (sqlserver.sql_text,sqlserver.tsql_stack) --feature и message не указываем, поск.они и так входят в колонки данного события where sqlserver.database_id = 13), --AdventureWorks_2005 add event sqlserver.deprecation_final_support (action (sqlserver.sql_text,sqlserver.tsql_stack) where sqlserver.database_id = 13) --будем писать в два назначения: --в память add target package0.ring_buffer (set max_memory=4096), --и в файл add target package0.asynchronous_file_target (set filename = 'c:\Demo\Deprecat.xel', metadatafile = 'c:\Demo\Deprecat.xem') --это общие п-ры сессии: with ( MAX_MEMORY = 4096KB, EVENT_RETENTION_MODE = ALLOW_MULTIPLE_EVENT_LOSS, MAX_DISPATCH_LATENCY = 1 SECONDS, MEMORY_PARTITION_MODE = NONE, TRACK_CAUSALITY = OFF, STARTUP_STATE = OFF ); alter event session Deprecat on server state = start; --стартуем сессию

  50. Расширенные события • Затем откройте DeprecatedIn2008.sql и запустите его депрецированую часть • Можно из той же сессии • Посмотрите, какие при этом насобирались XEvents • В памяти select databaseproperty('AdventureWorks_2005', 'Version') --будет заменена на databasepropertyex exec sp_dboption @dbname = 'AdventureWorks_2005', @optname = 'trunc. log on chkpt.', @optvalue = 'true' --sp_dboption в целом заменяется командой alter database; в данном случае действие эквивалентно ALTER DATABASE ... SET RECOVERY SIMPLE select * from Production.Product with (fastfirstrow) --хинт заменен на OPTION (FAST N) select * from Production.Product order by Name collate SQL_AltDiction_CP1253_CS_AS go declare @t table (fld1 text, fld2 image) --замена на varchar/varbinary(max) declare @db_id int, @tbl_id int; select @db_id = db_id(), @tbl_id = object_id('Production.Product'); dbcc pintable(@db_id, @tbl_id) select cast(xet.target_data as xml) from sys.dm_xe_session_targets xet inner join sys.dm_xe_sessions xe on (xe.address = xet.event_session_address) where xe.name = 'Deprecat'

More Related