Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Informix Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Несколько вопросов по оптимизации СУБД  [new]
genix
Member

Откуда:
Сообщений: 83
Подскажите, пожалуйста:

1) документацию по вопросам оптимизации производительности
2) как можно следить (вести логи) активности пользователей? а именно кто в данный момент выполняет какой запрос и сколько CPU использует данный пользователь? есть ли что-то более продвинутое, чем onstat -g sql? хотелось бы видеть всю историю запросов включая время их выполнения. Можно такое сделать?
27 янв 05, 09:22    [1277038]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
shurale
Member

Откуда:
Сообщений: 9
"Я вам не скажу за всю Одессу", но для IDS 7.31

1) Perfomance guide for Informix Dynamic server. Есть в комплекте документации, поставляемом с Informix-ом (Informix Answers Online).

2) onstat -g ses использует описанные в документации SMI таблицы syssessions и syssesprof и неописанную syssqlcurses (все - в базе sysmaster). Логов и истории там нет, но про существующие сессии можно узнать почти всё, что тебе нужно.
27 янв 05, 13:35    [1278311]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
genix
Подскажите, пожалуйста:

1) документацию по вопросам оптимизации производительности
2) как можно следить (вести логи) активности пользователей? а именно кто в данный момент выполняет какой запрос и сколько CPU использует данный пользователь? есть ли что-то более продвинутое, чем onstat -g sql? хотелось бы видеть всю историю запросов включая время их выполнения. Можно такое сделать?

genix ты задаешь тучи вопросов, но ответов не получаешь. А знаешь почему? Потому что ты пытаешься применить практики знакомые тебе по другим СУБД. Не говори у меня такие-то проблемы, раскажи сначала про задачу. Ты на первом повороте пошел не в ту сторону, зашел в дремучий лес и теперь спрашиваешь где выход?
Например никто в информикс видимо не пользуется rowtype и не выполняет "CREATE TEMP TABLE tablename OF TYPE subty", потому что есть более простой путь, для создания временных таблиц.
27 янв 05, 16:36    [1279380]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
genix
Подскажите, пожалуйста:

1) документацию по вопросам оптимизации производительности

IBM Informix Dynamic Server Performance Guide, Version 9.4 (G251-1259-00)

genix

2) как можно следить (вести логи) активности пользователей?

По простому никак, и зачем это надо? Если для производительности, то проще на клиенте, замерять время выполнения запроса и логировать длительные.

genix

а именно кто в данный момент выполняет какой запрос и сколько CPU использует данный пользователь? есть ли что-то более продвинутое, чем

onstat -g ses <sesid> показывет текущий(последний отпарсенный) sql запрос. Сколько CPU использует данный пользователь в общем случае узнать нельзя да и пользы никакой.

Если есть проблемы с производительностью то надо задавать другие вопросы и себе и нам, какие? см. faq
27 янв 05, 16:46    [1279447]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
genix
Member

Откуда:
Сообщений: 83
Журавлев Денис

genix ты задаешь тучи вопросов, но ответов не получаешь. А знаешь почему? Потому что ты пытаешься применить практики знакомые тебе по другим СУБД. Не говори у меня такие-то проблемы, раскажи сначала про задачу. Ты на первом повороте пошел не в ту сторону, зашел в дремучий лес и теперь спрашиваешь где выход?


Ну что-ж, попробую начать новую жизнь! $)

Итак, на небольшой базе под IDS 7.31.UD2 время от времени простенькие запросы к небольшой табличке выполняются разное количество времени.
Т.е., 99% времени они выполняются в среднем быстрее 1 секунды, однако иногда выполнение длится дольше 3 секунд и даже дольше 8 (доходило до 10).
Соответственно работа клиентов в этот момент блокируется (на некоторое время).
Соответсвено я сделал вывод (возможно не правильный), что кто-то в этот момент нагружает СУБД своими садистскими запросами.
Подскажите, с чего начать анализ происходящего в системе и разобраться с происходящим?

Доп. инфо: количество ovbuf (смотрю по onstat -p) в этот момент не увеличивается (оно уже давно стоит в значении 332), остальные ov[lock|userthread] нулевые.
27 янв 05, 17:19    [1279662]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
genix

Итак, на небольшой базе под IDS 7.31.UD2 время от времени простенькие запросы к небольшой табличке выполняются разное количество времени.
Т.е., 99% времени они выполняются в среднем быстрее 1 секунды, однако иногда выполнение длится дольше 3 секунд и даже дольше 8 (доходило до 10).
Соответственно работа клиентов в этот момент блокируется (на некоторое время).

Плохо что ты не сказал какой запрос Select или ?
Информикс блокировочник, поэтому пишущие блокируют не только пишущих но и читающих. В твоем случае очень похоже что твой запрос натыкается на чужую блокировку. А еще это похоже на чекпоинт :)
Информация о чекпоинтах отражается в логе (online.log), и в выводе утилиты onstat (в первой строке пишется состояние информикса обычно online).
Чего ожидает сессия можно понять по флагам выдержка из faq:
faq


Q.> когда поглядел onstat -u вот что увидел
>Userthreads
>address flags sessid user tty wait tout locks nreads nwrites
>1012e018 ---P--D 1 informix - 0 0 0 139 372
> ^^^^
> этих флажков
> я зе знаю
>рапишите пожалуйста что они означают

A.> Все хором, читай "Administrator Guide".
A.> Василий Шульженко
* Что обозначают флажки в выводе onstat -u ?
---------------------------------------------
Для 7.31:
Флаги обозначают статус сессии или ее отдельных нитей (если нитей
несколько).
Коды флага для 1-й позиции: (причина ожидания)
B waiting on a buffer
C waiting on a checkpoint
G waiting on a write of the logical-log buffer
L waiting on a lock
S waiting on mutex
T waiting on a transaction
Y waiting on condition - стандартное состояние
X waiting on a transaction cleanup (rollback)
27 янв 05, 17:45    [1279792]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
vybegallo
Guest
Неприятная ситуация с нерегулярно возникающей проблемой.
Напиши скрипт, имитирующий похожий запрос, который будет ждать 5 секунд окончания запроса и если нет - то сохранять в файле вывод команд onstat -a, onstat -g all, iostat, vmstat
После этого можно начинать разбираться.
27 янв 05, 18:11    [1279917]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
genix
Member

Откуда:
Сообщений: 83
спасибо всем, завтра буду разбираться подробнее!!
27 янв 05, 18:15    [1279932]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
vybegallo
Guest
Журавлев Денис
genix

Итак, на небольшой базе под IDS 7.31.UD2 время от времени простенькие запросы к небольшой табличке выполняются разное количество времени.
Т.е., 99% времени они выполняются в среднем быстрее 1 секунды, однако иногда выполнение длится дольше 3 секунд и даже дольше 8 (доходило до 10).
Соответственно работа клиентов в этот момент блокируется (на некоторое время).

Плохо что ты не сказал какой запрос Select или ?
Информикс блокировочник, поэтому пишущие блокируют не только пишущих но и читающих. В твоем случае очень похоже что твой запрос натыкается на чужую блокировку. А еще это похоже на чекпоинт :)


Checkpoints don't affect reading.
27 янв 05, 18:16    [1279935]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
vybegallo
Журавлев Денис
genix

Итак, на небольшой базе под IDS 7.31.UD2 время от времени простенькие запросы к небольшой табличке выполняются разное количество времени.
Т.е., 99% времени они выполняются в среднем быстрее 1 секунды, однако иногда выполнение длится дольше 3 секунд и даже дольше 8 (доходило до 10).
Соответственно работа клиентов в этот момент блокируется (на некоторое время).

Плохо что ты не сказал какой запрос Select или ?
Информикс блокировочник, поэтому пишущие блокируют не только пишущих но и читающих. В твоем случае очень похоже что твой запрос натыкается на чужую блокировку. А еще это похоже на чекпоинт :)


Checkpoints don't affect reading.

А где сказано что запрос(ы?) читают? -- "Т.е., 99% времени они выполняются в среднем быстрее 1 секунды..."
28 янв 05, 08:58    [1280700]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
genix
Member

Откуда:
Сообщений: 83
"vmstat"

procsyssqlcurseos y memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
1 0 0 20176 11820 19940 864956 0 0 0 1 1 0 0 0 1


а также

"iostat"

Linux 2.4.22 ( ) 28.01.2005

avg-cpu: %user %nice %sys %idle
1,86 0,00 0,12 98,01

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn



Выводы onstat очень большие, стоит ли приводить их? Если да, то какие части?
Смущает вот это:

"onstat -g all"

Virtual processor summary:
class vps usercpu syscpu total
cpu 1 344444.70 4371.33 348816.03
aio 48 2956.30 5790.85 8747.15
lio 1 11.51 53.15 64.66
pio 1 11.42 57.28 68.70
adm 1 64.16 109.97 174.13
soc 1 409.22 1614.68 2023.90
msc 1 15.01 7.76 22.77
total 54 347912.32 12005.02 359917.34


то что cpu = 1, хотя машина 2х процессорная. Корректно ли это с точки зрения оптимизации работы informix'а?
28 янв 05, 09:05    [1280715]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
genix
Member

Откуда:
Сообщений: 83
Журавлев Денис

А где сказано что запрос(ы?) читают? -- "Т.е., 99% времени они выполняются в среднем быстрее 1 секунды..."


тестирую запросами на чтение (количество секунд задержки соответствует 1 писку из спикера)
28 янв 05, 09:08    [1280719]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
genix
Member

Откуда:
Сообщений: 83
Журавлев Денис

Q.> когда поглядел onstat -u вот что увидел
>Userthreads
>address flags sessid user tty wait tout locks nreads nwrites
>1012e018 ---P--D 1 informix - 0 0 0 139 372
> ^^^^
> этих флажков
> я зе знаю


встречаются в основном такие :
пользовательские сессии:
2301e55c Y--P--- (около 30 шт)
2301ea58 Y-BP--- (2 шт)

root'овые сесии:
23010510 ---P--F (4 шт, пользователь root)
23012cf0 ---P--D (2 шт. пользователь root)
23011dfc ---P--B (1 шт, пользователь root)

итого
37 active, 128 total, 58 maximum concurrent
28 янв 05, 09:18    [1280746]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
genix

встречаются в основном такие :
пользовательские сессии:
2301e55c Y--P--- (около 30 шт)
2301ea58 Y-BP--- (2 шт)

Я имел в виду что надо смотреть на первый символ флагов сессии которая не отвечает, Y - это обычное состояние (ничего не ждем).
28 янв 05, 09:23    [1280753]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
vasilis
Member

Откуда: Украина, Киев
Сообщений: 2205
[quot genix то что cpu = 1, хотя машина 2х процессорная. Корректно ли это с точки зрения оптимизации работы informix'а?[/quot]
Просто такой параметр задан у тебя в конфигурационном файле onconfig.
Это значит, что есть только один виртуальный процессор, отвечающий за обработку запросов, а это, в свою очередь, говорит о том, что длительное выполнение какого либо процесса (DSS), связанное с процессорным временем (сортировка, например, или формирование отчета), будет тормозить выполнение всей очереди коротких OLTP-запросов, стоящих на обслуживание.
Если сервер на самом деле 2-х процессорный (а не HiperThreding), то можно установить параметры (все три взаимосвязаны).
MULTIPROCESSOR 1 # 0 for single-processor, 1 for multi-processor
NUMCPUVPS 2 # Number of user (cpu) vps
SINGLE_CPU_VP 0 # If non-zero, limit number of cpu vps to one
28 янв 05, 17:49    [1283496]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
genix
Member

Откуда:
Сообщений: 83
vasilis

MULTIPROCESSOR 1 # 0 for single-processor, 1 for multi-processor
NUMCPUVPS 2 # Number of user (cpu) vps
SINGLE_CPU_VP 0 # If non-zero, limit number of cpu vps to one


Спасибо, попробую!
28 янв 05, 17:51    [1283509]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
vasilis
Member

Откуда: Украина, Киев
Сообщений: 2205
И еще меня смущают следующие цифры
Virtual processor summary:
class vps usercpu syscpu total
cpu 1 344444.70 4371.33 348816.03

Это за какой же период собрана статистика ?
И уж больно большое соотношение usercpu к syscpu.
Или ввода/вівода очень мало или ...что то тут не так :)
28 янв 05, 18:05    [1283548]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
genix
Member

Откуда:
Сообщений: 83
vasilis
И еще меня смущают следующие цифры
Virtual processor summary:
class vps usercpu syscpu total
cpu 1 344444.70 4371.33 348816.03

Это за какой же период собрана статистика ?
И уж больно большое соотношение usercpu к syscpu.
Или ввода/вівода очень мало или ...что то тут не так :)


если под периодом понимается uptime который можно посмотреть по onstat, то речь идет всего лишь о 110 днях
28 янв 05, 18:19    [1283589]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
vasilis
Member

Откуда: Украина, Киев
Сообщений: 2205
genix
vasilis
И еще меня смущают следующие цифры
Virtual processor summary:
class vps usercpu syscpu total
cpu 1 344444.70 4371.33 348816.03

Это за какой же период собрана статистика ?
И уж больно большое соотношение usercpu к syscpu.
Или ввода/вівода очень мало или ...что то тут не так :)


если под периодом понимается uptime который можно посмотреть по onstat, то речь идет всего лишь о 110 днях

Нет, речь идет о времени, за которое собиралась статистика (она может обнуляться по onstat -z).
выполни лучше запрос по анализу загрузки проца. Только сначала обнули статистику, дай активно поработать серверу с час и покажи результат
-------------------------------------------------
-- Processor and main activity (CPU profile)
-- (whole instance)
--
-- V.Shulzhenko DBA_Tools 2004-05
-------------------------------------------------
set isolation to dirty read;
select
'===== CPU Profile ====' ______________
,DBINFO('dbhostname') hostname
,DBINFO('utc_to_datetime',sh_boottime) boot_time
,current year to second -
EXTEND(dbinfo('utc_to_datetime',sh_boottime),year to second) _running_time
,DBINFO('utc_to_datetime',sh_pfclrtime) zero_profile_time
,current year to second -
EXTEND(dbinfo('utc_to_datetime',sh_pfclrtime),year to second) statistic_time
,'-------------------------------' ______________
,'--Onconfig Effective--' __________
,(select cf_effective from sysconfig where cf_name='NUMCPUVPS') num_cpuvps
,(select cf_effective from sysconfig where cf_name='MULTIPROCESSOR') multiprocessor
,'-------------------------------' ______________
,'-- Stamp activity from boot --' __________
,sh_bootstamp boot_stamp
,sh_stamp current_stamp
,sh_stamp-sh_bootstamp _stamp_update
,round((sh_stamp-sh_bootstamp)/(sh_curtime-sh_boottime),4) _activity_psec
,'-- Processor Stat Time --' __________
,(select round(sum(usercpu),2) from sysvpprof) usercpu_time
,(select round(sum(syscpu),2) from sysvpprof) syscpu_time
,(select round(sum(usercpu+syscpu),2) from sysvpprof) _all_cpu_time
,(select round(sum(usercpu)/sum(usercpu+syscpu)*100,2) from sysvpprof) _user2sys_ratio
,round((select sum(usercpu+syscpu) from sysvpprof)/
(sh_curtime-sh_pfclrtime)*100,2) _IDS_cputime_ratio
,'-------------------------------' ______________
from sysshmvals;
28 янв 05, 18:26    [1283603]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
genix
Member

Откуда:
Сообщений: 83
vasilis

выполни лучше запрос по анализу загрузки проца. Только сначала обнули статистику, дай активно поработать серверу с час и покажи результат


теперь только в понедельник смогу ответить.

Еще раз премного благодарен за проявленое терпение!!!!!
28 янв 05, 18:30    [1283615]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
vybegallo
Guest
Попробуй добавить еще один процессор. Это можно сделать динамически, без перезапуска oninit : onmode -p +1 CPU
Относительно какую часть вывода публиковать - интересуют onstat -u, onstat -g ath, onstat -g con в момент зависания контрольной сессии. И номер этой самой сессии.
Хорошо бы еще в скрипте перед выходом обнулять статистику onstat -z , чтобы быть уверенным что полученные результаты - за время прошедшее с последнего успешного запуска.
28 янв 05, 19:04    [1283694]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
genix
Member

Откуда:
Сообщений: 83
1) добавил еще один процессор, без перезагрузки oninit
2) обновил статистику
3) на сервере запустили построение реестра, которое обычно приводило к "задержкам" во время выполнения остальных запросов чтения. Пока все нормально, программа-детектор (которая пищала при тормозах) подозрительно молчит, простой (idle) процессоров (по sar) падает ниже 50% (раньше опускался минимум до 50, ниже нет) -- полагаю что это благодатное следствие работы на двух процессорах вместо одного.
4) запрос имени vasilis выдает:

______________ ===== CPU Profile ====
hostname xxxx.xxxxxxxx
boot_time 2004-10-10 13:49:03
_running_time 112 20:35:41
zero_profile_time 2005-01-31 08:41:00
statistic_time 0 01:43:44
______________ -------------------------------
__________ --Onconfig Effective--
num_cpuvps 2
multiprocessor 1
______________ -------------------------------
__________ -- Stamp activity from boot --
boot_stamp 655519076
current_stamp 967678658
_stamp_update 312159582
_activity_psec 32.0015


Спасибо, что не дали пропасть в трудный момент!
Премного благодарен за все полученные советы (в том числе и как правильно задавать вопросы)!
31 янв 05, 10:27    [1286245]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
vasilis
Member

Откуда: Украина, Киев
Сообщений: 2205
К сожалению, концовку вывода запроса ты обрезал. тас как раз и хотел посмотреть загрузку процессоров.
Но раз помогло. то уже хорошо.
На будущее, можно указать в onconfig даже три или четыре CPU VP на двух физических процессорах, чтобы избежать торможений длительными процессами очереди коротких запросов. Общая эффективность работы сервера может быть немножко хуже (будет больше времени тратиться на переключение между VP и согласование работы), но эффективность обработки запросов улучшиться.
31 янв 05, 21:25    [1288864]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
genix
Member

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


О-пс, посыпаю голову пеплом -- результат запроса оказался двухстраничным $)

vasilis

Но раз помогло. то уже хорошо.
На будущее, можно указать в onconfig даже три или четыре CPU VP на двух физических процессорах


А как лучше быть на 2-х процессорах с HT (Intel Xeon)? Указывать 2 (физических) или 4 (с учетом HT) процессора? Система (linux) видит в общей сложности 4 процессора.
1 фев 05, 08:52    [1289243]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов по оптимизации СУБД  [new]
vasilis
Member

Откуда: Украина, Киев
Сообщений: 2205
genix

А как лучше быть на 2-х процессорах с HT (Intel Xeon)? Указывать 2 (физических) или 4 (с учетом HT) процессора? Система (linux) видит в общей сложности 4 процессора.

Да можно хоть 8. Я как то видел установленное количество в 20 CPU VP на два проца - и ничего, система жила нормально :)
Основной смысл в том, что CPU VP обслуживает больше 90% всей работы, необходимой для выполнения запросов, соответственно, именно он и потребляет основное процессорное время. Если запросы в чистом виде OLTP-шные (т.е. короткие по времени, без сканирования таблиц и процессорных вычислений), то и одного CPU VP вполне достаточно даже для двухпроцессорного хоста. При бОльшем кол-ве виртуальных процессоров им уже необходимо взаимодействовать между собой, переключать контексты, садиться на разные физические процессоры и т.п. Т.е. общая эффективность обработки может падать (больший процент процессорного времени будет уходить на служебную работу). Многочисленные рекомендации от производителя всегда рекомендовали делать кол-во CPU VP меньшим на единицу от кол-ва физических процов. Так говорит теория. Но практика показывает, что чистых OLTP запросов мало и тогда длинный запрос начинает тормозить всех. К тому же, рекомендации ранее расчитывались исходя из менее мощных процессоров, чем сейчас, да еще , как обычно, по хорошему принципу "не навредить". Современные интеловские процы достаточно мощные, чтобы тянуть 2 или 3 CPU VP каждый, хотя , конечно, многое зависит от крутости самих запросов. Тем не менее, для средней интеловской системы, как я уже ранее и говорил. я рекомендую по 2 CPU VP на каждый физический проц. HT, конечно, крутая маркетинговая штука, но для обработки ОДНОТИПНЫХ запросов она мало подходит, IMHO.
1 фев 05, 14:48    [1290801]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Informix Ответить