В загруженной системе, если все процессы ожидают ресурсов, может оказаться, что они ждут один и тот же ресурс чаще, чем мы себе это представляем. Это и есть конкуренция. Как было описано в главе "Метод, стоящий за безумием", при столкновении с проблемами производительности Oracle мы должны сделать первой линией обороны представления V$SYSTEMEVENT, V$SESSION_EVENT и V$SESSION_WAIT. Комбинированная информация, предлагаемая этими представлениями, снабжает нас сведениями о различных типах конкуренции, связанных с защелками, вводом/выводом, структурами SGA или буферами базы данных (если не упоминать обо всех остальных). Идя рука об руку с этими представлениями, мы должны отследить операторы SQL, вызывающие конкуренцию. Помимо всех тех динамических представлений производительности V$, которые обсуждались в упомянутой главе, мы хотим поближе познакомить читателей с представлением V$WAITSTAT. Оно будет полезным при проверке статистики для конкуренции.
В следующих разделах будет рассматриваться конкуренция, связанная с ментами отката, временными сегментами и защелками. Мы уже обсуждали настройку конкуренции для
списков свободных блоков
(freelists) в главе "Настройкабазы
данных". Здесь мы также коснемся вопроса, как некоторые сложности приложения, связанные с системными вопросами, могут вызвать у пользователей ложное ощущение проблем конкуренции. Это те самые области, которые АБД способен проверить и настроить. Относительно проще иметь дело с временными сегментами и сегментами отката. Мы познакомимся с такими динамическими представлениями производительности, как V$ROLLSTAT, V$SORT_SEGMENT и V$SORT USAGE.Однако в Oracle 7.3.x имеется более 50 защелок, а в Oracle8i их около 150.
Только очень небольшую их часть можно изменять пользователю, а может быть,
в этом и вовсе нет необходимости. Поэтому познакомьтесь с теми, которые по-
зволено изменять. Установите их на разрешенные максимальные значения, и
продолжим движение. Отсылаем читателя к динамическому представлению
производительности за полным перечнем защелок в его систе-
Только очень небольшую их часть можно изменять пользователю, а может быть,
в этом и вовсе нет необходимости. Поэтому познакомьтесь с теми, которые по-
зволено изменять. Установите их на разрешенные максимальные значения, и
продолжим движение. Отсылаем читателя к динамическому представлению
производительности за полным перечнем защелок в его систе-
ме, и предлагаем взглянуть на чтобы определить, сколь-
ко всего защелок конфигурировано для каждого их типа.
Сегменты отката: почему, как и как много?
Для оптимальной производительности базы данных Oracle очень критич-
ным является соответствующее конфигурирование сегментов отката. Иногда
АБД-новичок задумывается, каким же образом Oracle использует эти самые сег-
менты отката. У него (или у нее) возникает вопрос: а зачем базе данных вообще
нужны и сегменты отката, и журналы обновлений. Хороший вопрос. Журналы
обновлений используются для восстановления базы данных в случае сбоя экзем-
пляра или носителя данных. Однако журналы обновления когда
приложение пытается выполнить откат (или отменить ранее выполненные дей-
ствия) транзакции. В подобных случаях Oracle восстанавливает старую инфор-
мацию из сегментов отката. В дополнение к подобной роли хранителя старых
данных сегменты отката помогают проявлению одной из самых сильных воз-
можностей Oracle: многоверсионной согласованности по чтению.
ным является соответствующее конфигурирование сегментов отката. Иногда
АБД-новичок задумывается, каким же образом Oracle использует эти самые сег-
менты отката. У него (или у нее) возникает вопрос: а зачем базе данных вообще
нужны и сегменты отката, и журналы обновлений. Хороший вопрос. Журналы
обновлений используются для восстановления базы данных в случае сбоя экзем-
пляра или носителя данных. Однако журналы обновления когда
приложение пытается выполнить откат (или отменить ранее выполненные дей-
ствия) транзакции. В подобных случаях Oracle восстанавливает старую инфор-
мацию из сегментов отката. В дополнение к подобной роли хранителя старых
данных сегменты отката помогают проявлению одной из самых сильных воз-
можностей Oracle: многоверсионной согласованности по чтению.
Многоверсионная согласованность по чтению
Такая согласованность обозначает способ предоставления всем пользователям согласованного представления запрашиваемых ими данных. Многоверси-аспект предлагает это согласованное представление для нескольких сеансов пользователя. Проще говоря, это сценарий, в котором каждый пользователь видит свою собственную копию данных. Можно спросить об уместности создания копии для сеанса пользователя. Ответ будет простым и прямым: по умолчанию Oracle всегда предлагает данные, которые были зафиксированы к моменту начала транзакции. Любые изменения, произведенные над данными во время выполнения запроса, не будут видны пользователю до тех пор, пока он не обратится к ним повторно. Почему? Если данные не были подтверждены или зафиксированы, нельзя быть уверенным в их точности или уместности. Пользуясь промышленным жаргоном, скажем так: Oracle не делает грязных считываний. Некоторые другие реляционные базы данных разрешают и поддерживают такие чтения для сеансов пользователей. Однако заметьте для себя, что пользователь, произведший изменения в собственных данных, может видеть их результаты еще до того, как данные будут зафиксированы (в рамках того же сеанса).
Грязные чтения - это данные, которые еще не зафиксированы. Только представьте себе, какой вред могут причинить грязные данные некоторым финансовым приложениям или приложениям из области здравоохранения. В Oracle, даже если изменения в данных были зафиксированы уже после того, как начался запрос пользователя, вы по-прежнему будете видеть данные в том виде, в каком они существовали в момент старта запроса. Однако, если сегменты отката не сконфигурированы должным образом и к тому времени, как данные будут зафиксированы, запрос выполнялся уже длительное время, можно столкнуться с ошибкой, называемой "моментальный снимок слишком старый". Эта ошибка не имеет ничего общего с моментальными снимками состояния объектов Oracle. Мы познакомимся с ней очень близко. Но сначала давайте рассмотрим, как используются сегменты отката и как создаются совместимые по чтению представления данных.
< Предыдущая | Следующая > |
---|