Oracle режим совместимости со старыми версиями

Обновлено: 04.07.2024

Так, при запуске некоторых программ, написанных для Windows ХР и более ранних версий системы, могут возникнуть сложности: старые программы либо вовсе не запустятся, либо будут работать некорректно, со сбоями. Это, конечно же, единичные случаи, но если у многих программ есть свои эволюционные версии, то с компьютерными ретро-играми все несколько сложнее – установив Windows 8/8.1, многие, например, не смогут предаться бешенным гонкам и вечным побегам от полиции в старой, тем не менее, до сих пор популярной игре 2005 года «NFS: Most Wanted». Благо, решить это проблему помогут системные средства обеспечения совместимости, с помощью которых некоторые старые игры или программы можно будет запустить в режиме совместимости с предыдущими версиями Windows, в частности, ХР.

1. Что такое режим совместимости Windows?

Говоря упрощённо, когда какая-то программа или игра не имеет внутренних данных о существовании более новой версии Windows, она, естественно, не запустится в неизвестной ей среде. И запустить её можно только в специальном режиме, обеспечивающим совместимость более новой версии Windows с более старой. А данные о старой версии операционной системы у старой программы или игры, естественно, имеются. Задействуется режим совместимости определённой системной опцией. Но, обо всём подробней.

2. Запуск старых программ и игр на Windows 8/8.1 в режиме совместимости: пошаговая инструкция

Итак, у вас на компьютере установлена старая игра или программа, которая в обычном режиме не запускается на ОС Windows 8/8.1. Или запускается, но работает некорректно. Отыщите ярлык запуска этой игры или программы на рабочем столе или в папке установки. Правой клавишей мышки вызовите на файле контекстное меню. В этом меню выберите «Свойства».

zapusk-staryx-programm-v-rezhime-sovmestimosti_01

Появится окно свойств файла, где нас интересует вкладка «Совместимость». Здесь и находится системный инструмент обеспечения совместимости программ и игр, установленных на Windows 8/8.1, с её более ранними версиями.

zapusk-staryx-programm-v-rezhime-sovmestimosti_02

Вы увидите соответствующую опцию – «Запустить программу в режиме совместимости с», возле которой вам нужно установить галочку. Ниже выберите из выпадающего списка всех ранних версий Windows именно ту версию, на которой ваша игра или программа запускалась и корректно работала – например, Windows ХР SP2. Кстати, Windows ХР в списке представлена также отдельными сервиспаками – отдельными пакетами исправлений, которые выпускались для этой версии системы. Затем жмите «Применить», «ОК», запустите ярлык игры или программы и тестируйте.

Возможно, первый раз запуска на Windows 8/8.1 вашей программы или игры в режиме совместимости будет безуспешным – увы, в этой операционной системе многое требует доработки. Тогда стоит попробовать сменить версию Windows, включая разные сервиспаки ХР. Большинство программ и игр в своё время массово разрабатывались именно под Windows ХР. И чаще всего программные конфликты возникают именно между Windows ХР и последними версиями этой ОС – 7 и 8/8.1.

3. Прочие настройки режима совместимости

Вкладка «Совместимость» свойств ярлыка игры или программы имеет ещё ряд некоторых настроек, рассмотрим их.

В разделе «Параметры» находятся настройки отображения игры или программы на экране монитора.

3.1. Режим пониженной цветности

zapusk-staryx-programm-v-rezhime-sovmestimosti_03

zapusk-staryx-programm-v-rezhime-sovmestimosti_04

3.3. Отключение масштабирования изображения на современных мониторах с высоким разрешением

Если старя игра или интерфейс старой программы отображаются на современном мониторе с высоким разрешением искажённо, можно задействовать третью опцию параметров запуска в режиме совместимости.

zapusk-staryx-programm-v-rezhime-sovmestimosti_05

Она отключает масштабирование изображения на экране.

3.4. Применение настроек для всех учётных записей

Все проведённые вами настройки во вкладке «Совместимость» свойств ярлыка игры или программы запоминаются системой, и при повторном запуске вам ничего уже не нужно будет настраивать. Если зайти в Windows 8/8.1 под другой учётной записью, новому пользователю придётся всё настраивать самостоятельно. Потому если на вашем компьютере или ноутбуке присутствует несколько учётных записей, обладая правами администратора, можно применить опцию изменения параметров «для всех пользователей».

zapusk-staryx-programm-v-rezhime-sovmestimosti_06

И тогда режим совместимости будет работать для всех, у кого есть доступ к устройству с разных учётных записей.

Подводя итоги…

Как упоминалось, в режиме совместимости можно запускать лишь некоторые старые игры и программы, но не все. Не исключён вариант, что ваши усилия могут не увенчаться успехом, и вы не сможете запустить какую-то из старых игр и программ на Windows 8/8.1. Но это не повод огорчаться – вы можете установить программу для создания виртуального компьютера (например Hiper-V или VirtualBox), создать таковой, установить на него любую старую версию Windows и уже в неё инсталлировать старую игру или программу. Этот способ куда надёжней, чем режим совместимости Windows 8/8.1 со старыми версиями. Правда, ваш компьютер или ноутбук должен обладать более-менее мощным «железом» – программы для работы с виртуальными компьютерами типа Virtual Dub или VMware Workstation не любят слабенькие, вечно подтормаживающие машины. Ведь тогда аппаратными мощностями придётся делиться пополам, и о быстродействии останется только мечтать.

Смотрите также:

Иногда, при установке или запуске некоторых (часто устаревших) программ в Windows Server 2008 (справедливо и для Windows 7), можно наткнуться на ошибку вида: "Версия этого файла несовместима с используемой версией…

Сделать работу с компьютером быстрее, эффективнее и удобнее можно с помощью горячих клавиш, которые предусматриваются как для работы в конкретных программах, так и для функций самой операционной системы. ОС Windows…

Наверное каждый кто работает на ОС Windows 7 или Windows 8 встречался с вопросом запуска приложения от имени администратора. Иногда данная функция решает некоторые проблемы с запуском того или иного…



(с)

Обратная совместимость применительно к аппаратным или программным системам означает способность успешно использовать интерфейсы и данные из более ранних версий системы. Этот принцип распространяется не только на программы, которые работают с файлами, созданными в более ранних версиях этих же программ, но и касается ситуаций работы со схожими алгоритмами. Например, Perl поддерживает обратную совместимость с другим языком — Awk, — который Perl был предназначен заменить.

Обратную совместимость легче выполнять, если предыдущие версии системы были разработаны с поддержкой встроенных функций, таких как хуки, плагины или API, которые позволяют добавлять новые возможности вашему софту, однако все из области backward compatibility (c упором на back) может стать головной болью для разработчиков.

Откажешься от нее совсем — расстроятся пользователи предыдущих версий систем и продуктов, вмиг потеряв весь парк накопленных гаджетов или программ. Обеспечишь полную обратную совместимость — станешь заложником прошлых решений, сделав свой продукт тяжелым, неповоротливым, или даже не способным на нужный прирост характеристик.

Разработчик каждый раз принимает трудное решение: должен ли продукт быть обратно совместимым. «Объективно правильного» решения здесь просто нет — в мире достаточно примеров успешной обратной совместимости и отказов от нее. Возможно, чей-то опыт поможет сделать вам правильный выбор прямо сейчас.

Давайте снова поменяем стандарт

Один из самых ярких примеров, когда об обратной совместимости решили забыть, это появление разъема USB 3.1 Type C (USB-C). Многие годы мы не ведали проблем: любой гаджет с разъемом micro- или miniUSB можно было воткнуть в любой соответствующий USB-порт. Но консорциум USB-IF создал разъем Type C, совершенно несовместимый механически ни с одним из сотен миллионов, а то и миллиардов смартфонов, кабелей, зарядных устройств и прочих гаджетов.

Еще одна проблема заключается в том, что не каждый USB-C кабель, порт, устройство и питание совместимы между собой: некоторые кабели с USB-C на обоих концах могут передавать лишь 5 Гбит/с, другие совместимы с 10 Гбит/с, а есть и те, что нельзя использовать для питания.


Ситуация привычная для тех, кто когда-то собирал себе компьютеры самостоятельно или занимался их апгрейдом. За последние 20–30 лет на наших глазах сменилось множество поколений шин и портов, почти каждое из которых не было обратно совместимо с предыдущими. Поменялись буквально все разъемы на материнской плате, и не по одному разу: сокеты процессоров, шины видеокарт и оперативной памяти, разъемы для подключения накопителей и периферии.


Нездоровая чехарда в мире процессоров продолжается до сих пор: вполне себе бодрые модели, которые гонять и гонять, через несколько лет уже нельзя поставить на новые материнские платы. Производителям трудно устоять перед соблазном регулярно делать бесполезными запасы железа у пользователей, заставляя их нести деньги на новые модели. Отсутствие обратной совместимости не греет душу, когда купленный три года назад процессор приходится менять на практически такой же, потому что умерла материнская плата.

Универсальный разъем, предназначенный для передачи данных и питания, способен стать единственным портом на устройстве — и в этом несомненный плюс USB Type-C. Можно смириться с отсутствием обратной совместимости в гаджетах, и даже отметить для себя плюсы (более высокую скорость передачи данных и иные параметры электропитания), но в сфере ПО болезненнее воспринимается несовместимость новых версий со старыми. Особенно это касается корпоративных продуктов, стоимость которых и влияние на бизнес-процессы слишком велики.

Геймдев

В экосистеме ПК игры обратно совместимы в течение десятилетий. Такие утилиты как DOSBox позволяют нам играть даже в самые ранние ПК-релизы. Фактор совместимости, при которой переход на новую версию системы с большой вероятностью не влечет за собой проблем, похоже, сыграл роль в текущем доминировании Windows. Да, в результате 32-битные версии Windows поддерживали запуск 16-битного программного обеспечения Windows и некоторый софт MS-DOS (а в 64-битных версиях, соответственно, работают 32-битные программы), но Microsoft получили огромную тяжелую платформу, в которой есть совместимость даже с ошибками.

А как дела у приставок?


Отчет Ars Technica показал, как пользователи Xbox One и Xbox 360 используют свои устройства. Интересно, что данные из отчета по приставке Microsoft совпадают с мнением корпорации Sony, которая не рассматривает обратную совместимость в PlayStation 4 как нечто важное. По мнению руководителя Sony Interactive Entertainment Europe Джима Райана, об этой функции больше говорят, чем реально пользуются. Хотя Sony действительно предоставила возможность скачать игры для PS1 и PS2 на PS4.

Некоторые сайты проводили свои собственные опросы в преддверии выхода Xbox One и PS4 — тогда было отмечено, что многие игроки заявляли о желании обратной совместимости. Microsoft привлекла большое внимание к обратной совместимости с Xbox One. Функция была в целом хорошо реализована, но сейчас не особо привлекает геймеров.

В линейках Nintendo DS и Wii также есть много примеров обратной совместимости.
Геймдевелоперы усилия компаний встретили более воодушевленно — больше не требуется изучать архитектуру с нуля, чтобы воспользоваться преимуществами нового консольного оборудования. Обратная совместимость позволяет относительно просто поддерживать релизы для всех устройств, созданных на основе общей архитектуры.

Обратная совместимость в языках



(с)

Каждый популярный язык программирования имеет ясную эволюцию, большую часть его жизни обозначенную версией: у вас есть Java 5, 6, 7 и т. д., PHP 5.1, 5.2, 5.3 и т. д. Каждая новая версия исправляет ошибки и добавляет функции, но если язык (или платформа) имеет фундаментальные изъяны, то разработчики либо избегают их (если могут), либо учатся жить с ними.

Разработчики языков получают много отзывов от программистов, использующих тот или иной язык программирования в своей работе. Кажется, что однажды выйдет версия языка, в которой все проблемы исчезнут. Но этого не происходит. Почему так? Один из вариантов — обратная совместимость.

У популярного PHP есть недостатки, и те, кто давно с ним работают, прекрасно знают, как можно обойти все ловушки и ямы языка. Теперь предположим, что в новой версии языка исправили все минусы, но потеряли обратную совместимость. В результате разработчик тратит время на обновление кода до актуальной версии PHP. То самое время, которое он мог бы потратить на выполнение запросов клиентов или внедрение новых функций.

Учитывая эти проблемы, понятен мотив тех, кто не хочет переходить на новую версию PHP, даже если она лучше, понятнее и безопаснее и т. д. Вы скажете, что это гипотетический пример. Возможно… Но в мире еще есть программисты, которые до сих пор работают на COBOL! Язык появился в 1958 году. К 1997 году активно использовалось около 240 миллиардов строк кода на COBOL, кодом на этом языке обрабатывалось около 90% финансовых транзакций в мире и 75% коммерческих транзакций. Самое интересное — это потрясающая совместимость языка: тот COBOL, который использовался в 60-х, может работать и на современном оборудовании.

Есть продукты, которые в принципе не могут поломать обратную совместимость, потому что это поставит на них крест. Например, Java: основная сфера применения этого языка — бизнес-приложения, по всему миру написано астрономическое количество строк кода, в том числе в огромных корпоративных кодовых базах. Код, написанный 20 лет назад, до сих пор работает. И если завтра выйдет версия Java, в которой разработчики накрутят фантастические фичи, но без обратной совместимости, то никто больше не станет инвестировать очень большие деньги в разработку серьезных — и дорогих — приложений. Так что Oracle придется либо всю жизнь тянуть за собой груз старых версий, либо открывать дорогу нововведениям, но при этом теряя большую долю клиентов. На третий вариант — поддерживать одновременно две ветки Java, с полноценным сопровождением и развитием — не согласится сама корпорация.

В свое время разработчики Python нарушили обратную совместимость, тем самым разозлив кучу пользователей. Большинство программистов не считало язык Python 2.x «ошибочным» или содержащим «фундаментальные изъяны». У них не было таких жалоб, какие появляются у разработчиков на PHP.

Сегодня сообщество языка разделено на два лагеря, при этом масса готовых библиотек под вторую версию не дает многим мигрировать на третью, хотя та и привнесла в язык ряд сильных улучшений. В результате закрепилось мнение, что «Python 3 — это худшее, что могло случиться с сообществом Python».

У проблемы есть и обратная сторона — Python 3 был выпущен в декабре 2008 года, но поддержка языка во фреймворке Django появилась только спустя пять лет.

Хотя нет 100% совместимости между C и C ++, но даже в C ++ есть обратная совместимость с очень ранними функциями языка (включая некоторые функции, унаследованные непосредственно от C).

Накопление технического долга

Иногда проблема возникает потому, что мы просто не в силах предсказать будущее. В 1981 году «Интернета» хватало всем и каждому — была описана первая широко используемая версия протокола IPv4, использующая 32-битные адреса, ограничивающие адресное пространство 4 294 967 296 возможными уникальными адресами.

4,3 миллиарда адресов IPv4 выглядели более чем достаточно для ARPANet. IPv6 появился в 1998 году (описан в RFC2460), но популярности протокол не снискал. Потребовалось более десяти лет, чтобы на проблему ограниченного количества адресов обратили внимание. И вот тогда стало понятно, что гигантская база разработанного и установленного программного и аппаратного обеспечения IPv4 требует сохранения обратной совместимости IPv6 с IPv4.

«Внезапно» выяснили, что IPv6 был разработан без полноценной совместимости с предыдущей версией — узел с поддержкой только IPv6 не может подключиться к узлу, работающему только по IPv4. Переход от IPv4 к IPv6 требовал «двухстековой» фазы, во время которой хост-компьютер взаимодействовал бы с обоими стеками протоколов одновременно, используя стек протокола IPv6 для взаимодействия с другими хост-компьютерами IPv6, а стек протокола IPv4 для взаимодействия с другими хост-компьютерами IPv4.

Некоторые коммутаторы, маршрутизаторы и устройства безопасности также оказались не совместимы с IPv6. Таким образом процесс перехода на IPv6 столкнулся со множеством проблем, решать которые предлагается разными способами. Ни одно из существующих решений нельзя назвать идеальным, но каждое из них найдет свое применение.

Философия обратной совместимости в ПО



Когда задумался, нужно ли в новой версии поддерживать совместимость (с)

В софте обратная совместимость, как правило, подразумевает сильное увеличение размеров файлов и всего приложения, но самое главное не это. Обратная совместимость обычно требует тащить за собой исторический багаж, что в интерпретируемых языках нередко приводит к заметным потерям в производительности.

При обратной совместимости раздувается кодовая база, усложняется архитектура приложения, затрудняется апгрейд приложений. Возникает желание отринуть старое и написать компактный, легкий код, использующий самые современные наработки.

Например, новая версия Skype больше не может устанавливать голосовые и видеосоединения с версиями под Windows XP. И, конечно, некоторые пользователи хотят проигнорировать новый релиз, предпочтя остаться на старом, но таком привычном.

Да, обратная совместимость сегодня считается одним из важнейших условий при разработке программных продуктов. Она позволяет пользователям наименее безболезненно — а значит, и комфортно — переходить на новые продукты. Производителям игровых приставок, например, важно обеспечивать обратную совместимость новых игр со старыми гаджетами, чтобы максимально расширять аудиторию потенциальных покупателей. Но при этом разработчикам труднее реализовывать новый уровень реалистичности графики и физики, что, по иронии, может снизить привлекательность системы для геймеров.

В результате получился продукт, который на данный момент нас полностью устраивает. В этом случае «обратная совместимость» вышла за пределы одного лишь сервиса — мы сделали совместимость не только с наработками в других проектах, но и с нашим собственным опытом. Осознание этого факта приводит к простой мысли: не всегда новый язык, новая версия программы или новый гаджет является универсальным решением поставленной перед вами задачи.

Перенос приложения с СУБД Oracle 9 на Oracle 11 может быть реализован несколькими способами. Два основных, это

  1. Импорт схем данных в новую БД
  2. Миграция БД

Первый способ предпочтителен, когда требуется перенести одну или две схемы данных, базирующихся на небольшом количестве табличных пространств. Если же приложение составляют несколько схем данных, то проще воспользоваться решениями Oracle по обновлению (миграции) данных. Эти решения предполагают выполнение следующих действий

1. Подготовка к обновлению.
2. Протестируйте процесс обновления.
3. Протестируйте обновленную тестовую базу данных.
4. Подготовка и сохранение рабочей базы данных.
5. Обновите производственную базу данных.
6. Настройте и настройте новую производственную базу данных Oracle.

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

При обновлении базы для программного обеспечения Oracle Database 11g Release 2 (11.2) 11.2.0 минимальное значение параметра COMPATIBLE - 10.0.0.0.0 , а максимальное COMPATIBLE 11.2.0.n.n . К сожалению, обновление до данной версии программного обеспечения с версии 9.2 возможно только для финальной версии Oracle 9.2.0.8 . И, если Вы не имеете соответствующего набора патчей, то Вам остается только процедура импорта данных, или же длинный путь через обновление до промежуточной версии 10.2.0.4 .

После установки программного обеспечения для Oracle Database 11g Release 2 (11.2) вы
получаете доступ к скрипту rdbms/admin/utlu112i.sql , который надо запустить в среде старой БД для проверки возможность обновления. Этот шаг является обязательным. Если он не выполнен или выполнен с ошибками, то скрипт обновления catupgrd.sql завершит работу с ошибками.

В принципе выполненный скрипт допускает обновление, хотя версия 9.2.0.6 в соответствии с документацией является недопустимо старой. Это настораживает. Кроме того, когда увидишь весь этот объем информации, то все меньше желания идти по пути обновления. И понимаешь, что импорт приложения это проще и быстрее и находится под Вашим контролем. И если Ваше приложение не сильно зависит от БД, то импорт становится еще более привлекательным.

Следующий шаг. Вы должны скопировать файлы финальной холодной копии вашей обновляемой БД в соответствии с новыми инициализационными параметрами, запустить экземпляр СУБД Oracle 11.2, подмонтировать БД, при необходимости изменить пути файлов, и открыть БД для обновления.

При необходимости создаем табличное пространство sysaux

Теперь запускаем скрипт catupgrd.sql . Если все прошло успешно, то запускаем экземпляр, остановленный скриптом catupgrd.sql , и выполняем следующие шаги

  1. Запускаем скрипт utlu112s.sql . Его надо запустить первым.
  2. Запускаем скрипт catuppst.sql, lдля выполнения обновлений, не требующих, чтобы БД была открыта в режиме UPGRADE mode.
  3. Запускаем скрипт utlrp.sql для компиляции инвалидных объектов.

Если возникают ошибки, то устраняем их причины, и для надежности, выполняем все сначала. Поэтому исходники холодной копии старой БД должны быть под рукой.

Значение уровня совместимости базы данных в SQL Server


До SQL Server 2014 уровень совместимости базы данных ваших пользовательских баз, как правило, не являлся требующим внимания аспектом, по крайней мере, с точки зрения производительности. В отличии от уровня файлов базы данных (который автоматически апгрейдится, когда вы восстанавливаете или присоединяете базу данных более низкого уровня к экземпляру, запущенному на более новой версии SQL Server, и который никогда не опускается к более низкому уровню), уровень совместимости базы данных может быть изменен до любого поддерживаемого уровня с помощью простой команды

Вы не привязаны к какому-то конкретному поддерживаемому уровню совместимости и можете изменить его по вашему желанию на любой другой из поддерживаемых. Во многих случаях большинство пользовательских баз данных никогда не изменяют свой уровень совместимости после перехода к новой версии SQL Server. Это обычно не вызывает никаких проблем до тех пор, пока вам не понадобятся новые возможности, доступные на последнем доступном уровне совместимости базы данных.

Для SQL Server 2012 и ниже уровень совместимости базы данных, главным образом, использовался для контроля над тем, доступны или нет новые возможности, введенные в конкретной версии SQL Server, и доступны или нет не поддерживаемые уже старые возможности. Уровень совместимости базы данных также использовался как метод поддержания обратной совместимости приложений со старыми версиями SQL Server. Если у вас не было времени, чтобы выполнить полное тестирование регрессии на новейшем уровне совместимости, вы могли просто использовать прежний уровень совместимости до тех пор, пока выполните тестирование и, при необходимости, модификацию ваших приложений.

В таблице 1 показаны основные версии SQL Server и их уровни совместимости, поддерживаемые и принимаемые по умолчанию.


























































Версия SQL ServerВерсия движка БДУровень совместимости по умолчанию Поддерживаемые уровни
SQL Server 2019 15 150 150, 140, 130, 120, 110, 100
SQL Server 2017 14 140 140, 130, 120, 110, 100
SQL Server 2016 13 130 130, 120, 110, 100
SQL Server 2014 12 120 120, 110, 100
SQL Server 2012 11 110 110, 100, 90
SQL Server 2008 R2 10.5 100 100, 90, 80
SQL Server 2008 10 100 100, 90, 80
SQL Server 2005 9 90 90, 80
SQL Server 2000 8 80 80

Таблица 1: Версии SQL Server и поддерживаемые ими уровни совместимости

Создание новой базы данных


Когда вы создаете новую пользовательскую базу данных в SQL Server, уровень совместимости базы данных будет установлен в уровень совместимости по умолчанию для этой версии SQL Server. Так, например, новая пользовательская база данных, которая создается в SQL Server 2017 получит уровень совместимости базы данных 140. Исключение возникает, если вы измените уровень совместимости системной базы данных model на другой поддерживаемый уровень, тогда новая пользовательская база данных будет наследовать этот уровень совместимости от базы данных model.

Восстановление или присоединение базы данных

Если вы восстанавливаете полный бэкап базы данных, который был сделан на более старой версии SQL Server, на экземпляре, который запущен на более новой версии SQL Server, то уровень совместимости базы данных останется прежним, каким он был на старой версии SQL Server, если уровень совместимости старой базы данных не ниже, чем минимальный поддерживаемый уровень совместимости новой версии SQL Server.

Например, если вы восстанавливаете бэкап базы данных с SQL Server 2005 на экземпляре SQL Server 2017, уровень совместимости для восстановленной базы данных будет установлен в 100. Вы получите то же самое поведение, если отсоедините базу данных с более старой версии SQL Server, а затем присоедините её к более новой версии SQL Server.

Такое поведение не ново, но кое-что новое и важное может еще произойти, когда вы переводите пользовательскую базу данных на уровень совместимости 120 или новее. Эти дополнительные изменения, которые могут оказать существенное влияние на производительность, видимо, недостаточно известны и поняты широкому сообществу пользователей SQL Server. Я по-прежнему встречаю многих профессионалов в области баз данных и организации, выполняющих то, что я называю "апгрейд вслепую". Это когда они переходят с SQL Server 2012 или более ранних версий на SQL Server 2014 или новее (особенно SQL Server 2016 и SQL Server 2017), не выполняя сколь-нибудь серьезного тестирования падения производительности, чтобы выяснить, как их рабочая нагрузка будет вести себя на новом естественном уровне совместимости, и доступны ли дополнительные конфигурационные параметры, способные оказать положительный эффект.

Уровень совместимости 120

Здесь был введен новый оценщик кардинального числа (CE), т.е. изменилась оценка числа строк. Во многих случаях большинство ваших запросов стало выполняться быстрей при использовании нового оценщика, но зачастую имелось небольшое число запросов, которые демонстрировали существенное падение производительности с новым оценщиком кардинального числа. Использование уровня совместимости базы данных 120 означает, что вы будете использовать "новый" CE до тех пор, пока не установите флажок трассировки уровня экземпляра или не будете использовать хинт в запросе, чтобы отменить его действие.

Joe Sack еще в апреле 2014 года написал классическую работу “Optimizing Your Query Plans with the SQL Server 2014 Cardinality Estimator” (Оптимизация ваших планов запросов с оценщиком кардинального числа SQL Server 2014), которая объясняет основание и поведение сделанных изменений. Если вы наблюдаете падение производительности некоторых запросов с новым СЕ, SQL Server имел немного вариантов, чтобы устранить проблемы с производительностью, вызванные новым СЕ. Joe подробно описал эти возможности, которые, по существу, сводились к флажкам трассировки или хинтам в запросах для контроля над тем, какой оценщик кардинального числа применяется оптимизатором запросов. Или же вы решали вернуться обратно к уровню совместимости базы данных 110 и ниже.

Я использую "новый" СЕ в кавычках потому, что теперь нет единственного "нового" СЕ. Каждая следующая версия SQL Server, начиная с SQL Server 2014, имеет свой СЕ, и изменения оптимизатора запросов привязаны к уровню совместимости базы данных. Новая более точная терминология, соответствующая SQL Server 2016 и далее, использует СЕ120 для уровня совместимости 120, СЕ130 - для уровня совместимости 130, СЕ140 - для уровня совместимости 140, и СЕ150 - для уровня совместимости 150.

Уровень совместимости базы данных 130

Если вы имеете SQL Server 2016 или новее, использование уровня совместимости базы данных 130 будет применять СЕ130 по умолчанию, и будут доступны и все другие изменения, касающиеся производительности. Эффекты глобальных флажков трассировки 1117, 1118 и 2371 будут действовать при уровне совместимости базы данных 130. Вы также получите эффект глобального флажка трассировки 4199 для всех заплаток (hotfix), которые были поставлены до SQL Server 2016 RTM.

SQL Server 2016 также ввел конфигурационные опции уровня базы данных, которые дают вам возможность контролировать некоторое поведение и которые ранее конфигурировались на уровне экземпляра сервера, с помощью команды ALTER DATABASE SCOPED CONFIGURATION. Двумя наиболее уместными для темы настоящей статьи конфигурационными опциями уровня базы данных являются ESTIMATION и QUERY_OPTIMIZER_HOTFIXES.

LEGACY_CARDINALITY ESTIMATION включает унаследованный СЕ (СЕ70) вне зависимости от установки уровня совместимости базы данных. Это эквивалентно флажку трассировки 9481, но влияет только на соответствующую базу данных, а не на весь экземпляр. Это позволяет вам установить уровень совместимости базы данных в 130 для того, чтобы получить другие функциональные возможности и выгоды с точки зрения производительности, и при этом использовать унаследованный СЕ уровня базы данных (если он не переписывается хинтом в запросе).

Опция QUERY_OPTIMIZER_HOTFIXES эквивалентна флажку трассировки 4199 на уровне базы данных. SQL Server 2016 делает доступными все заплатки оптимизатора запросов, поставленные до SQL Server 2016 RTM, когда вы используете уровень совместимости базы данных 130 (без установки флажка трассировки 4199). Если вы устанавливаете флажок 4199 или включаете QUERY_OPTIMIZER_HOTFIXES, вы также получите все заплатки оптимизатора запросов, которые были выпущены после SQL Server 2016 RTM.

SQL Server 2016 SP1 также ввел хинты запроса USE HINT, которые легче использовать и понять, чем устаревшие хинты запроса QUERYTRACEON, которые могли использоваться в SQL Server 2014 и ранее. Это дает вам даже более тонкое управление поведением оптимизатора, чем связанное с используемыми уровнем совместимости и версией оценщика кардинального числа. Вы можете выполнить запрос к sys.dm_exec_valid_use_hints, чтобы получить список доступных названий в USE HINT.

Уровень совместимости базы данных 140


Если у вас установлен SQL Server 2017 или новее, использование уровня совместимости базы данных 140 будет применять СЕ140 по умолчанию. Вы также получаете все другие связанные с производительностью изменения от 130 плюс новые. SQL Server 2017 ввел новые возможности адаптивной обработки запросов, и они доступны по умолчанию, когда уровень совместимости базы данных установлен в 140. Они включают обратную связь по выделению памяти в пакетном режиме (batch mode memory grant feedback), адаптивные соединения в пакетном режиме (batch mode adaptive joins) и чередующееся выполнение (interleaved execution).

Уровень совместимости базы данных 150

Если вы имеете SQL Server 2019 или новее, использование уровня совместимости базы данных 150 будет применять СЕ150 по умолчанию. Вы также получаете все остальные изменения, связанные с производительностью, от 130 и 140 плюс новые, введенные в этой версии. SQL Server 2019 добавляет даже больше улучшений производительности и изменений поведения, чем доступно по умолчанию, когда база данных использует уровень совместимости 150. Главным примером является встраивание скалярных функций пользователя (scalar UDF inlining), который автоматически встраивает много скалярных UDF в ваших пользовательских базах данных. Это может быть одним из наиболее важных улучшений производительности при некоторых рабочих нагрузках.

Другим примером является интеллектуальная обработка запросов (intelligent query processing), которая является подмножеством адаптивной обработки запросов в SQL Server 2017. Новые возможности включают отложенную компиляцию табличных переменных (table variable deferred compilation), неточную обработку запросов (approximate query processing) и пакетный режим для построчного хранения (batch mode on rowstore).

Имеется также 16 новых конфигурационных параметров уровня базы данных (в CTP 2.2), которые дают вам больше возможностей управления базами данных, чем это предоставлялось флажками трассировки или уровнем совместимости базы данных. Это позволяет осуществлять более тонкий контроль высокоуровневых изменений, чем поведение по умолчанию при уровне совместимости базы данных 150.

Заключение

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

Майкрософт рекомендует процесс апгрейда на новейшую версию SQL Server с сохранением уровня совместимости переносимых баз данных. Затем включить Query Store на каждой базе данных и собрать показательные данные при рабочей нагрузке. Потом установить уровень совместимости последней версии и использовать Query Store, чтобы зафиксировать падение производительности, принудительно используя последний заведомо хороший план.

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

Другим вопросом, заслуживающим внимания, является то, что Майкрософт начинает продвигать идею, что вы должны думать о тестировании ваших баз данных и приложений на конкретном уровне совместимости базы данных, а не на конкретной версии SQL Server. Майкрософт обеспечивает защиту формы плана запроса, когда новая версия SQL Server запускается на железе, которое совместимо с железом, на котором была запущена предыдущая версия (исходная) SQL Server, и один и тот же поддерживаемый уровень совместимости базы данных используется на обеих версиях.

Основная идея заключается в том, что если вы протестировали ваши приложения на конкретном уровне совместимости, например, 130, вы получите то же самое поведение и производительность, если переместите базу данных на новую версию SQL Server (например, SQL Server 2017 или SQL Server 2019), пока вы используете тот же уровень совместимости базы данных и эквивалентное железо.

Читайте также: