русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Многопоточный сервер Oracle


Дата добавления: 2013-12-23; просмотров: 1485; Нарушение авторских прав


Рис. 6.1. В простых клиент-серверных конфигурациях сеансу соответствует один серверный процесс и, следовательно, один трассировочный файл

Клиент-серверные приложения

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

Отсутствие межплатформенного стандарта именования трассировоч­ных файлов вызвало у нашей компании затруднения при создании пе­реносимого инструмента для поиска таких файлов. Мы рассматривали вариант с пополняемой таблицей шаблонов имен (т. е. регулярных вы­ражений), которую можно было бы исправлять по мере переноса Oracle на новые платформы и выхода новых версий. Но мы пришли к выводу, что при поддержании актуальности такой таблицы неизбежно возни­кало бы множество ошибок. В результате мы остановились на таком алгоритме:

1. По заданным идентификатору и порядковому номеру выбранного

сеанса (значения V$SESSION.SID и V$SESSION.SERIAL#) определить сис­темный идентификатор (SPID) соответствующего серверного про­цесса. Этот идентификатор содержится в поле V$PROCESS.SPID, соот­ветствующем выбранному сеансу, и может быть получен при помо­щи соединения, аналогичного приведенному в примере 6.3.

 

Найти, в каком каталоге располагаются файлы трассировки. Этот каталог определяется значением параметра USERDUMPDEST, если V$SESSION.TYPE='USER', или параметра BACKGROUNDDUMPDEST, если V$SESSION.TYPE='BACKGROUND'.

Отсортировать содержимое каталога по убыванию даты изменения файла (например, командой ls -lt в UNIX). Имейте в виду, что вре­мя изменения файла (атрибут mtime) обычно указывается с точно­стью до секунды. Поэтому, если несколько файлов были созданы в течение одной секунды, сравнение значений mtime не даст ответа на вопрос, какой из них был создан последним.



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

 

Найти в файле последнююпреамбулу. В особенности это касает­ся платформ Microsoft Windows, где ядро Oracle часто стремится повторно использовать трассировочные файлы, дописываяно­вые данные к уже существующим. (Поэтому в одном файле мо­жет быть несколько преамбул.)

Найти в преамбуле строку, содержащую подстроку «pid» (для Unix и OpenVMS) или «thread id» (для Windows). Преамбулу со­ставляют все строки вплоть до той, которая начинается с под­строки «***».

Если число, следующее за подстрокой «pid» или «thread id», сов­падает с идентификатором SPID выбранного сеанса, нужный файл найден, и поиск заканчивается.

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

Для проекта Sparky, о котором можно прочитать на сайте http:// www.hotsos.com,мною был написан переносимый код на Perl, выпол­няющий действия, аналогичные описанным.

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

Параллельное выполнение (Oracle PX)

При параллельном выполнении Oracle (Oracle Parallel eXecution - PX) серверный процесс Oracle порождает два или более дочерних процесса (называемых подчиненными процессами PX)для выполнения парал­лельного чтения и параллельной сортировки. Подчиненные процессы PX наследуют атрибуты трассировки от координатора запроса. Следо­вательно, включение расширенной трассировки SQL для сеанса, кото­рый использует функциональность PX, приведет к формированию не­скольких файлов трассировки. Задача заключается в том, чтобы опо­знать и проанализировать всенужные файлы. Обычно она решается достаточно просто - необходимо оценить время изменения файлов трассировки, сформированных последними. Для запросов, исполь­зующих степень параллелизма p,количество nсоответствующих фай­лов трассировки будет находиться в диапазоне 1 < n < 2p+1 для каж­дого вовлеченного экземпляра.

Применение многопоточного сервера Oracle (MTS) несколько услож­няет поиск данных трассировки. MTS делает возможным использова­ние коммутируемых соединений, что приводит к созданию отношения «один-ко-многим» между сеансом и серверными процессами Oracle, которые обслуживают вызовы базы данных, выполненные сеансом (рис. 6.2). Соответственно, данные трассировки для одного сеанса мо­гут оказаться разбросанным по двум или более трассировочным фай­лам. Ядро Oracle предоставляет полные сведения по идентификации сеанса и временные метки каждый раз, когда сеанс мигрирует в новый серверный процесс (а следовательно, и в новый файл трассировки). Создать логический эквивалент единого файла трассировки для кон­кретного сеанса несложно. Рассмотренный ранее способ поиска фай­лов трассировки претерпевает следующие изменения:

 

 



<== предыдущая лекция | следующая лекция ==>
Рекомендации по использованию инструментальных средств разработки файл-серверных приложений | Пул соединений


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.