Поделиться через


Рекомендации по миграции из Oracle в База данных Azure для PostgreSQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер

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

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

Рекомендуемое решение. Убедитесь, что первоначальные оценки захватывают ВСЕ аспекты среды платформы базы данных, включая шаблоны потребления памяти и использования памяти обеих систем глобальной области (SGA) и структур памяти глобальной области (PGA). Выберите соответствующее семейство вычислений, соответствующее вашим требованиям к ресурсам, и убедитесь, что запланированная емкость Postgres корректируется по мере необходимости.

Совет

Расширение pg_buffercache предоставляет средства для изучения использования и позволяет наблюдать за тем, что происходит в общем кэше буфера в режиме реального времени.

коэффициент попаданий в буферный кэш

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

SELECT COUNT(*) AS total
, SUM(CASE WHEN isdirty THEN 1 ELSE 0 END) AS dirty -- # of buffers out of sync with disk
, SUM(CASE WHEN isdirty THEN 0 ELSE 1 END) AS clean -- # of buffers in sync with data on disk
FROM pg_buffercache;

Наиболее часто доступные таблицы и индексы

Изучение наиболее часто доступ к таблицам и индексам и (или) занимает больше всего места в кэше буфера, чтобы определить хот-точки кэширования в памяти:

SELECT b.relfilenode, relname, relblocknumber
, relkind 
--r = ordinary table, i = index, S = sequence, t = TOAST table
--, v = view, m = materialized view, c = composite type
--, f = foreign table, p = partitioned table, I = partitioned index
, COUNT(*) AS buffers
FROM pg_buffercache b
JOIN pg_class c ON c.oid = b.relfilenode
GROUP BY b.relfilenode, relname, relblocknumber, relkind
ORDER BY buffers DESC
LIMIT 10;

Содержимое кэша буфера

Значительное состязание в кэше буфера означает, что несколько запросов могут бороться за одно и то же буферное пространство, что приводит к узким местам производительности. Изучение расположения и частоты доступа к буферу может помочь в диагностике таких проблем:

SELECT c.relname, b.relblocknumber, COUNT(*) AS access_count
FROM pg_buffercache b
JOIN pg_class c ON c.relfilenode = b.relfilenode
GROUP BY c.relname, b.relblocknumber
ORDER BY access_count DESC
LIMIT 10;

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

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

Сценарий. Организации, перенесенные в Postgres в первый раз, могут быть незнакомы с рекомендациями и подходами при выявлении медленных запросов. При реализации новых типов индексов следует проявлять особое внимание и внимание. В частности, ядро СУБД Postgres предназначено для оптимизации производительности запросов без необходимости или возможности указания подсказок запросов.

Рекомендуемое решение: расширения являются неотъемлемой частью того, что делает Postgres таким мощным. Существует несколько расширений, которые позволяют обеспечить высокую производительность базы данных. Некоторые ключевые расширения, которые следует учитывать, включают:

  • auto_explain: автоматически регистрирует планы выполнения запросов, которые выполняются за пределами заданного порогового значения. Позволяет администраторам баз данных диагностировать проблемы с производительностью и оптимизировать производительность запросов без ручного запуска EXPLAIN для каждого запроса.

  • pg_trgm: предоставляет функции и операторы для определения сходства текстовых данных путем сопоставления триграмм. Это расширение полезно для задач, связанных с поиском текста, нечетким сопоставлением и запросами на основе сходства. В сочетании с индексами GIN или GIST в текстовых столбцах улучшена производительность запросов LIKE и поиска сходства.

  • pg_cron: позволяет планировать и управлять периодическими задачами непосредственно в базе данных. Интегрирует планирование заданий, таких как cron, в Postgres, что обеспечивает автоматизацию стандартных задач обслуживания, обработки данных и аналогичных повторяющихся операций.

Совет

Если операции базы данных включают значительное количество повторяющихся операций создания и удаления объектов базы данных, старые кортежи системных таблиц pg_catalog будут увеличиваться, что приведет к тому, что таблица "blat". Так как pg_catalog является системной таблицей, связанной с множеством операций с базами данных, неуправляемое обслуживание в этой таблице может привести к снижению производительности в базе данных. Убедитесь, что pg_catalog достаточно сохранены и надлежащим образом вакуумируются, можно обеспечить путем настройки повторяющегося расписания pg_cron.

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

Примечание.

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

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

Рекомендуемое решение. Переоценка необходимости в стратегиях секционирования, создающих чрезмерно большое количество секций. Ядро СУБД Postgres больше не требует того же сегментирования данных, что и сокращение числа секций, вероятно, повышает производительность. Если оценивается устаревшая схема секционирования и она определена, рекомендуется перенастроить запрос на дискретные операции, чтобы сначала определить и извлечь динамические ключи секционирования, а затем использовать ключи секций в операциях запроса.

Сценарий. Иногда внешними зависимостями и экологическими обстоятельствами могут потребоваться сценарии гибридной базы данных, в которых базы данных Oracle и Azure Postgres должны сосуществовать. Например, могут возникнуть случаи, когда поэтапные миграции необходимы для доступа к данным Oracle непосредственно из Azure Postgres без затрат на импорт данных или изменение сложных процессов ETL. В других случаях параллельное выполнение проверки данных путем сравнения эквивалентных наборов данных в средах Oracle и Azure Postgres одновременно может помочь обеспечить согласованность и целостность данных во время и /или после миграции.

Рекомендуемое решение. Расширения оболочки внешних данных PostgreSQL (FDW) — это ключевая функция Postgres, которая позволяет получать доступ к данным, хранящимся во внешних системах, как если бы эти данные находились в базе данных Azure Postgres в собственном коде. FDWs позволяет Azure Postgres функционировать как федеративная база данных, позволяя интегрироваться с любым количеством внешних источников данных, включая базы данных Oracle. FDWs создают определения внешней таблицы в базе данных Postgres, а эти внешние таблицы служат прокси-сервером для определенного внешнего источника данных, позволяя пользователям запрашивать эти внешние таблицы с помощью обычных запросов SQL. Внутри системы Postgres используется внешнее определение FDW для обмена данными и координации данных по запросу из удаленного источника данных.

oracle_fdw. (Внешний оболочка данных для Oracle) — это расширение Postgres, позволяющее получить доступ к базам данных Oracle из Azure Postgres. При миграции из Oracle в Azure Postgres oracle_fdw может играть важную роль, предоставляя доступ к данным, проверку данных, добавочную миграцию и синхронизацию данных в режиме реального времени. Важно учитывать следующие ключевые аспекты при использовании FDW:

  • Выполнение запросов через oracle_fdw будет нести издержки в виде сетевого взаимодействия и согласования проверки подлинности во время обработки и извлечения данных с удаленного сервера Oracle
  • Некоторым типам данных может потребоваться специальная обработка или преобразование, чтобы обеспечить правильное сопоставление типов данных между системами.

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