#database #performance #oracle #database-design
Вопрос:
Каковы некоторые полезные оптимизации Oracle, которые можно использовать для приложения, которое в основном записывает (обновляет) базу данных Oracle?
Общая схема использования здесь заключается не в веб-обслуживании или ведении журнала, как в большинстве случаев, а в сохранении сложного состояния системы, поэтому чтение требуется только при запуске системы, после чего ее обновление и создание полностью. Таким образом, прямо сейчас соотношение записи и чтения превышает 9 к 1, в этом случае какая настройка базы данных может повысить производительность?
Ответ №1:
Мониторинг работоспособности системы с использованием statspack (9i) или AWR (10g ) был бы лучшим методом выявления узких мест.
В частности:
- высматривайте, ждет ли повтор. Журнал повтора имеет решающее значение для поддержания высокой скорости записи
- Используйте переменные привязки
- Используйте массовые операции везде, где это возможно.
- Следите за конфликтом индексов, когда несколько процессов вставляют записи в одну таблицу, имеющую индекс в столбце, производном от последовательности
Ответ №2:
Вместе с ответом Дэвида:
- Следите за миграцией строк и активностью цепочки строк и при необходимости изменяйте параметры хранения таблиц
- Проверьте свою файловую систему журнала повторов: отключите кэширование FS (т. Е. используйте Прямой ввод-вывод), отключите время последнего доступа, измените размер блока на 512B. Или, что еще лучше, перейти на ASM.
- Прочитайте о таблицах, организованных по индексам, и посмотрите, сможете ли вы применить их где угодно.
- Убедитесь, что используется асинхронный ввод-вывод.
- Для больших размеров SGA включите большие страницы и LOCK_SGA (зависит от платформы).
- Поэкспериментируйте с различными настройками DBWR (например, fast_start_mttr_target, dbwr_процессы)
- На аппаратном уровне убедитесь, что у вас есть приличный контроллер RAID-10 с включенным кэшированием записи! Получите много жестких дисков с частотой вращения 15 тыс. об / мин.
И последнее, но не менее важное: определите повторяемые и реалистичные тесты производительности, прежде чем вносить какие-либо изменения. В этом виде настройки много ошибок — для каждого выполнения теста вносите только одно изменение за раз.
Комментарии:
1. Последнее предложение само по себе является очень хорошим советом даже само по себе.
Ответ №3:
Я не мог бы рекомендовать консоль управления Oracle Enterprise (встроенную в Oracle) в достаточной степени. Это позволит вам точно знать, что вы делаете неправильно и как это исправить!
Возможно, вы захотите избавиться от любых дополнительных индексов (индексов?) возможно, так оно и было. Это может привести к небольшим накладным расходам при запуске, но добавление данных в индексированную таблицу может значительно замедлить ее.
Ответ №4:
В зависимости от характеристик вашего приложения и ваших данных рассмотрите возможность массовой загрузки данных с использованием внешней таблицы Oracle. Попросите приложение записать данные в текстовый файл, затем используйте ВСТАВКУ В целевую таблицу из ВЫБОРА во внешней таблице = очень быстро.
Есть некоторые ограничения, и это может не соответствовать вашим обстоятельствам, но это дает огромную производительность, когда вы можете ее использовать.
Я использовал это для загрузки файлов текстовых данных почти в реальном времени со скоростью 40 000 файлов в день, до 2 МБ на файл, в экземпляр базы данных Oracle 10g объемом 8 ТБ (да, терабайт).