Мониторинг на производителността и анализ на изчакващите събития
когато използвате Oracle DBMS на Unix

Мониторинг на ефективността на базата данни и анализ на събитията на изчакване
За да подобрите производителността на Oracle Database, трябва да анализирате събитията на изчакване на Oracle, за да идентифицирате тесните места и да настроите параметрите на базата данни. Подобряването на ефективността на обработката в базата данни на Oracle подобрява производителността на всички системи и приложения, които използват базата данни. Тази статия демонстрира как да използвате системни помощни програми за ефективно събиране и анализиране на статистически данни за ефективността на базата данни на Oracle, за да идентифицирате проблеми.
Производителността на базата данни на Oracle се влияе от много фактори. По-специално, факторите, изброени по-долу, оказват значително влияние върху производителността.
Неефективните SQL изрази влияят отрицателно върху производителността
- Използвайки заявкатаselect * from employee, ние извличаме всички записи от таблицата. Намираме в резултатите на конкретен служител. Ако резултатът от заявката съдържа много записи, този процес ще бъде бавен.
- Използваме заявкатаselect * from Employee където Employee_name='employee1'. Този оператор стеснява търсенето и ускорява процеса.
- Използваме заявкатаизберете * от служител, където Employee_id=123. Тъй като employee_id е първичният ключ, тази заявка ще бъде най-бързата
За да създадете най-ефективния SQL оператор, използвайте следните указания:
- Избягвайте заявки, които не съдържат клаузи where и първични ключове.
- Голям брой заявки за изтриване с течение на времето води до нарастване на несвързаните блокове с данни. Операторът за изтриване само премахва данни от блок, но не освобождава блока от данни за по-нататъшна употреба. Тъй като операторитеdelete не намалява горната граница на запълване, общото количество данни, които ще бъдат търсени от бъдещи заявки, не се намалява. Използвайте оператора за съкращаване, където е възможно, тъй като той нулира горната граница на запълване.
- Използвайте изрази COMMIT само когато е необходимо. Избягвайте да ги използвате често, тъй като те задействат промивания на буфери, което може да доведе до прекомерен I/O.
Неефективната конфигурация на базата данни се отразява негативно на производителността
Лошата конфигурация се отразява отрицателно на производителността на базата данни. Специфичните опции за инициализация и конфигурация на базата данни засягат не само конфигурацията на изпълнение, но и обработката на заявки. Производителността може да бъде неблагоприятно повлияна от следните настройки (ако не са оптимално конфигурирани).
Параметър PCTFREE
Параметърът PCTFREE задава минималния процент свободно пространство в блока, запазено за възможни актуализации на вече съществуващи редове в този блок. Твърде ниската стойност на PCTFREE може да причини проблеми с надстройката. Стойността, която е твърде висока, може да загуби място и да причини прекомерно движение на блокове с данни.
PCTUSED параметър
Параметърът PCTUSED задава минималния процент на използване на блока за данни в редове и режийните разходи за добавяне на нови редове към блока. След попълване на блок с данни до лимита, определен от параметъра PCTFREE, Oracle счита блока за недостъпен за вмъкване на нови редове, докато процентът падне под стойността на параметъра PCTUSED. Докато този праг бъде достигнат, Oracle използва свободното пространство на блок с данни само за актуализиране на редове, които вече се съдържат в блока.
Неадекватното разпределение на системната глобална област (SGA) памет влияе отрицателно върху производителността
Системната глобална зона (SGA) е група от споделени структури на паметта, съдържащи данни и контролна информация за единичен екземпляр на база данни на Oracle. Потребителите, свързани към едно и също копие по едно и също време споделят данни в SGA на инстанцията. Следователно SGA понякога се нарича споделена глобална зона. За да осигурите ефективна производителност на базата данни, трябва да определите оптималния размер на SGA паметта и да я настроите съответно. Твърде малко памет може значително да влоши производителността на базата данни.
Събитията за изчакване влияят отрицателно върху производителността
Събитията за изчакване възникват, докато се обработват заявките. Заявка за четене/запис към база данни на Oracle извиква множество процеси. Тези процеси може да срещнат проблеми с хардуера, софтуера, операционната система или конфигурацията, които ще спрат или забавят обработката. Тези блокиращи фактори се наричат събития на изчакване. Използването на изрази за изчакване трябва да бъде сведено до минимум, за да може базата данни да работи ефективно. Трябва да анализирате всички изпълнявани изрази за изчакване и да ги коригирате, ако времето за изчакване е твърде дълго. Не е възможно обаче напълно да се премахнат всички събития на изчакване.
Oracle Database 11g има над 1000 събития на изчакване, които могат да причинят забавяне на обработката на заявки. Тези събития на изчакване обикновено се разделят на следните групи:
- клъстер (клъстер)
- мрежа (мрежа)
- Администрация (администрация)
- Конфигурация (конфигурация)
- ангажирам ( ангажирам )
- приложение
- Паралелност(паралелизъм)
- System I/O (системен вход/изход)
- Потребителски I/O (потребителски вход/изход)
- CPU (процесор)
Използване на Oracle Enterprise Manager за анализиране на събития на изчакване
Oracle Enterprise Manager (OEM) се използва за наблюдение на изчакващите събития за обработка на данни. OEM графично показва състоянието на базата данни по време на обработка. Той също така предоставя подробен отчет за анализ, където можете да навигирате до всяко събитие и да намерите съответните SQL изрази (вижте Фигура 1). Легендата вдясно показва типовете събития за изчакване.
Фигура 1. Примерна екранна снимка на Oracle Enterprise Manager


Фигура 2 показва подробен изглед на изчакването на потребителския вход/изход за данните, използвани във фигура 1. НатиснетеПотребителски вход/изход в OEM, за да отидете на страницата с подробности за събитието на потребителския вход/изход.
Фигура 2. Изчакване на активни сесии


Разбор на събития за изчакване със скрипт на Shell
Можете да събирате статистически данни за събитията на изчакване на база данни на Oracle без инструменти, като използвате скрипт на обвивка и вградени системни помощни програми. За да съберете и анализирате статистически данни, за да идентифицирате източника на тесни места и да коригирате проблеми с поддръжката на администратора на базата данни, трябва да изпълните следните стъпки.
Подготовка на данни
Трябва да се подготвят достатъчно данни, тъй като базата данни ще работи няколко часа или цяла нощ. Често отнема много време, за да се открият проблеми с кеша, които може да не се появят през първите няколко часа от стартирането на базата данни. Натоварването на базата данни трябва да симулира производствени условия. Трябва да се осигуритакава смесица от данни, че заявките съдържат операции за вмъкване, актуализиране, изтриване и съкращаване в реално време. Всеки синтактичен елемент на Data Manipulation Language (DML) използва различен източник, така че трябва да направите набора от данни подобен или близък до данните от производствената среда.
Стъпка 1. Създайте скрипт
За да получите подробности и SQL изрази за събитията на изчакване в изгледите V$ACTIVE_SESSION_HISTORY, V$EVENT_NAME и V$ SQLAREA, създайте просто съединение с три таблици.
V$ACTIVE_SESSION_HISTORY Показва активността на сесията в базата данни. Той съдържа всяка втора моментна снимка на активната сесия на базата данни.V$EVENT_NAME Показва информация за събития на изчакване.V$SQLAREA Показва статистика за общата SQL област, съдържа един ред за всеки SQL оператор. Предоставя статистически данни за SQL изрази, които са в паметта, анализирани и готови за изпълнение.
Тъй като данните в тези изгледи се изчистват периодично, използвайте скрипта в списък 1, за да събирате данни на редовни интервали.
Листинг 1. gather_event_stats.sh скрипт за периодично събиране на данни
За да могат данните, събрани в текстов файл, да бъдат представени с помощта на електронни таблици (например Microsoft Excel) и допълнително анализирани, символът тилда се използва като разделител на колони (
). Този скрипт създава SQL файл на редовни интервали, изпълнява SQL операторите за събиране на данните и поставя статистиката в текстовия файл $outfile_name.
Стъпка 2. Стартирайте скрипта
Поставете скрипта на който и да е сървър на приложения и стартирайте скрипта за събиране на данни. INВ кода по-долу, преди да извикате скрипта, заменете променливите ORADBNAME, ORACLEID, PASSWORD с подходящите стойности.
Забележка. Тези стойности могат да бъдат направени параметри и предадени на скрипта по време на изпълнение.
За да изпълните скрипт, използвайте следния синтаксис:
Стартирайте скрипта преди данните да бъдат заредени и не го спирайте, докато данните не бъдат заредени. Когато стартирате скрипта, изберете внимателно стойностите за брой итерации ($1) и интервал ($2) за израза Брой итерации x интервали = продължителност на теста.
За да проверите дали скриптът работи, изпълнете следната команда:
Стъпка 3. Обработка на данни
Въведете данните и проверете дали приложението обработва данните. Проверете отново дали данните се зареждат в базата данни. Изчакайте, докато всички данни бъдат обработени. Извеждайте файла $outfile_name (името на файла, където се поставя изходът от заявката; в нашия случай статистика за събитието за изчакване) на редовни интервали и проверявайте дали файлът нараства по размер.
Стъпка 4. Анализ на данни и настройка на база данни
Фигура 3. Екранна снимка на необработени данни в текстов файл


- Импортирайте данните в електронна таблица на Excel, като изберетеДанни > Преобразуване на текст в колони. Посочете знака тилда (
) като разделител на данни в колони (вижте фигура 4).
Фигура 4. Екранна снимка на данни за събитие за изчакване след разделяне в Excel с помощта на разделител


- Въз основа на тези данни създайте обобщена таблица, за да получите сумата от общите времена на изчакване за всяко събитие. Единицата за време е една стотна от секундата, така че разделете на100, за да го преобразувате в секунди. Веднъж създадена, сортирайте обобщената таблица, за да определите събитието с най-дълъг период на изчакване (вижте Фигура 5).
Фигура 5. Екранна снимка на обобщена таблица


- Анализирайте събитието на изчакване с Oracle DBA, за да разберете причината за това събитие. В нашия пример събитието с най-дълго време на изчакване е TX - index contention. Това показва проблем с индексирането при обработката на транзакция.
- Вземете SQLID на изразите за най-дълго чакане и проверете съответните SQL изрази. Полето C.SQL_TEXT указва SQL израза за всеки SQLID. Свържете се с вашите разработчици и вашия DBA, за да определите дали SQL изразите могат да бъдат настроени за намаляване на изчакванията.
- Повторете стъпка 6 за всяко от 10-те събития с най-дълго време на изчакване.
- Приложете решенията, предложени от разработчиците и DBA, за да разрешите тези събития на изчакване.
- Изпълнете този тест отново със същото натоварване и за същата продължителност, за да видите дали времето за изчакване е намалено или събитието за изчакване е напълно елиминирано.
Заключение
Тази статия описва един начин за събиране на статистически данни за събития на изчакване за база данни на Oracle. Процесът е много прост и не изисква специални инструменти. Този метод е приложим за анализиране и разрешаване на проблеми с производителността на базата данни за IBM продукти, които са интегрирани с бек-енд бази данни на Oracle.