Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560 / 21 сообщений из 21, страница 1 из 1
26.03.2019, 14:01
    #39791510
140907
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
Здравствуйте.
В AWR в разделе "Top SQL with Top Events" в топе запрос вида
INSERT INTO схема.таблица (список колонок) VALUES(сиквенс.NEXTVAL, остальные значения) RETURNING ID INTO :O0
при этом у запроса
Executions = 2560
Event = row cache lock
Top Row Source = SEQUENCE
т.е. выполнений немного за 15 минут.
У сиквенса
ORDER_FLAG = N
CACHE_SIZE = 0
но нулевой кеш не должен был стать помехой при таком небольшом количестве выполнений, мне кажется (все равно его увеличу).
Т.е. с одной стороны AWR говорит, что сиквенс стал узким местом, а с другой стороны в этом сомневаюсь.
В разделе "Dictionary Cache Stats" dc_sequences был примерно в 2 раза больше обычного, зато dc_rollback_segments - в десятки раз больше.
Подскажите, пожалуйста, направление, в котором разбираться.
...
Рейтинг: 0 / 0
26.03.2019, 14:06
    #39791518
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
140907в этом сомневаюсьИ что ты ожидаешь в качестве ответа? Для форума априори выводы AWR авторитетнее твоих сомнений.
...
Рейтинг: 0 / 0
26.03.2019, 14:20
    #39791537
140907
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
Event = row cache lock, потому что если у сиквенса CACHE_SIZE = 0, то при каждом получении nextval происходит "row cache lock" для этого сиквенса?
...
Рейтинг: 0 / 0
26.03.2019, 14:42
    #39791550
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
140907при каждом получении nextval происходитПри каждом nextval nocache происходит апдейт и коммит.
140907Event = row cache lockПочему оно тебя так волнует?
...
Рейтинг: 0 / 0
26.03.2019, 15:06
    #39791589
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
140907INSERT INTO схема.таблица (список колонок) VALUES(сиквенс.NEXTVAL, остальные значения) RETURNING ID INTO :O0
...
т.е. выполнений немного за 15 минут.

Поправка: немного insert.
Про "сиквенс.NEXTVAL" этого однозначно сказать нельзя - вставка может выполняться пакетно и последовательность будет дергаться для каждой строки.
...
Рейтинг: 0 / 0
26.03.2019, 15:16
    #39791601
140907
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
-2-140907Event = row cache lockПочему оно тебя так волнует?
Думал, что выделение nextval может приводить к событию " enq: SQ - contention ", т.е. событие "row cache lock" говорит о чем-то другом.
Т.е. если кеш равен нулю, то частый nextval приводит к "row cache lock", а если не равен нулю (но недостаточен), то к "enq: SQ - contention"?
...
Рейтинг: 0 / 0
26.03.2019, 15:33
    #39791638
140907
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
andrey_anonymousПро "сиквенс.NEXTVAL" этого однозначно сказать нельзя - вставка может выполняться пакетно и последовательность будет дергаться для каждой строки.
Не понял. В AWR указывается реальное количество произошедших инсертов, и для каждого инсерта дергается сиквенс, т.е. 2560 инсертов - 2560 дерганий сиквенса?
В моем случае это инсерт одной строки за транзакцию (правда, коммит происходит намного позже этого инсерта, но ведь сиквенс будет освобожден сразу после получения nextval, его блокировка не привязана к этому коммиту).
Т.е. Оракл считает, что 2560 дерганий nocache-сиквенса за 15 минут (т.е. примерно 3 раза в секунду) - это слишком часто?
Просто раньше этот сиквенс в топе проблем не появлялся.

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
CORE 12.1.0.2.0 Production
TNS for IBM/AIX RISC System/6000: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production.
...
Рейтинг: 0 / 0
26.03.2019, 15:50
    #39791660
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
140907Т.е. если кеш равен нулю, то частый nextval приводит к "row cache lock"Нет оснований для домыслов.
...
Рейтинг: 0 / 0
26.03.2019, 15:51
    #39791662
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
140907andrey_anonymousПро "сиквенс.NEXTVAL" этого однозначно сказать нельзя - вставка может выполняться пакетно и последовательность будет дергаться для каждой строки.
Не понял. В AWR указывается реальное количество произошедших инсертов, и для каждого инсерта дергается сиквенс, т.е. 2560 инсертов - 2560 дерганий сиквенса?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
INSERT INTO DEVELOPER.DROPME_TESTINS(A)
VALUES
(:B1 )


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.01       0.02          0         39        182       10000
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.01       0.02          0         39        182       10000
...
Рейтинг: 0 / 0
26.03.2019, 16:07
    #39791675
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
140907Оракл считает, что 2560 дерганий nocache-сиквенса за 15 минут (т.е. примерно 3 раза в секунду) - это слишком часто?
Тут сразу две логических ошибки.
1. "2560 дерганий ... за 15 минут" исходит из предположения, что все эти "дергания" происходили равномерно на интервале в 15 минут, что само по себе не факт - все 2560 вызовов могли столпиться в одной секунде из указанного интервала.
2. Oracle ничего не "считает".
Если требуется эксклюзивный доступ к ресурсу, то такой доступ запрашивается.
В процессе ожидания доступа фиксируется соответствующее событие ожидания.
Дальше для Вашего удобства строится отчет.
2560 вызовов за 15 минут - много это или мало?
Зависит от уровня конкуренции, располагаемых ресурсов, требований к системе и оценивается администратором, а не сервером.
...
Рейтинг: 0 / 0
26.03.2019, 22:32
    #39791909
140907
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
Спасибо за инфо.
...
Рейтинг: 0 / 0
28.03.2019, 15:34
    #39793028
140907
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
Допустим, я у сиквенса сделаю CACHE_SIZE = 1000. Эта тысяча номеров будет храниться в SGA?
Стоит ли беспокоиться о том, что кешированные значения сиквенсов занимают оперативную память БД, или их объем настолько мал, что не приведет к вытеснению чего-то полезного?
...
Рейтинг: 0 / 0
28.03.2019, 15:44
    #39793039
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
140907Эта тысяча номеров будет храниться в SGA?Зачем тысяча?
...
Рейтинг: 0 / 0
28.03.2019, 15:59
    #39793057
140907
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
1000 - это как пример, хотя если за 147 минут значение LAST_NUMBER увеличилось на 9 102 200 (т.е. в среднем значение запрашивалось 1031 раз в секунду), то в этом случае тысячи даже будет мало?
...
Рейтинг: 0 / 0
28.03.2019, 16:09
    #39793074
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
1409071000 - это как примерВопрос был не про выбор размера кеша, а зачем хранить 1000 номеров. Сиквенс это одна строчка в таблице seq$.
...
Рейтинг: 0 / 0
28.03.2019, 16:23
    #39793101
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
140907Стоит ли беспокоиться о том, что кешированные значения сиквенсов занимают оперативную память БД
Все будет хорошо.
...
Рейтинг: 0 / 0
28.03.2019, 16:52
    #39793131
140907
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
CACHE
Specify how many values of the sequence the database preallocates and keeps in memory for faster access.
Это из документации Оракла.
Я понял это как хранение массива значений в памяти.
Наверно, в памяти хранится только текущий LAST_NUMBER и порог, и если LAST_NUMBER > порога, то происходит обращение к сиквенсу за новым порогом (с изменением сиквенса).
Это все теория, она интересна, но мне главное, чтобы сотня сиквенсов с CACHE_SIZE = 1000 (утрирую) не стала занимать слишком много памяти.
Поверю andrey_anonymous.
...
Рейтинг: 0 / 0
28.03.2019, 17:29
    #39793177
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
1409071в среднем значение запрашивалось 1031 раз в секундуили 10 раз в секунду.
140907Поверюопровергнуть гипотезу о выделении памяти под каждый номер дело полминуты.
...
Рейтинг: 0 / 0
28.03.2019, 17:56
    #39793220
140907
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
-2-или 10 раз в секунду.
9102200/147/60=1031. Или тут еще какая-то хитрость?

-2-опровергнуть гипотезу о выделении памяти под каждый номер дело полминуты.
Если у вас есть запрос, поделитесь, пожалуйста.
...
Рейтинг: 0 / 0
28.03.2019, 18:18
    #39793241
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
140907-2-опровергнуть гипотезу о выделении памяти под каждый номер дело полминуты.Если у вас есть запрос, поделитесь, пожалуйста.Чудак, ты сам не в состоянии сделать петакэш?
...
Рейтинг: 0 / 0
28.03.2019, 20:05
    #39793308
140907
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560
andrey_anonymous,
-2-,
Похоже, в памяти не хранятся.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
select 'shared pool free memory = '||bytes/1024/1024||' MB' from v$sgastat where name = 'free memory' and pool = 'shared pool';
create sequence test_seq start with 1 cache 10000000000000000000;
select 'shared pool free memory = '||bytes/1024/1024||' MB' from v$sgastat where name = 'free memory' and pool = 'shared pool';
select 'nextval = '||test_seq.nextval from dual;
select 'shared pool free memory = '||bytes/1024/1024||' MB' from v$sgastat where name = 'free memory' and pool = 'shared pool';
select 'nextval = '||test_seq.nextval from dual;
select 'shared pool free memory = '||bytes/1024/1024||' MB' from v$sgastat where name = 'free memory' and pool = 'shared pool';
create sequence test_seq start with 1 cache 10000000000000000000;
select 'shared pool free memory = '||bytes/1024/1024||' MB' from v$sgastat where name = 'free memory' and pool = 'shared pool';
select 'nextval = '||test_seq.nextval from dual;
select 'shared pool free memory = '||bytes/1024/1024||' MB' from v$sgastat where name = 'free memory' and pool = 'shared pool';
select 'nextval = '||test_seq.nextval from dual;
select 'shared pool free memory = '||bytes/1024/1024||' MB' from v$sgastat where name = 'free memory' and pool = 'shared pool';
drop sequence test_seq;
select 'shared pool free memory = '||bytes/1024/1024||' MB' from v$sgastat where name = 'free memory' and pool = 'shared pool';

shared pool free memory = 373.56569671630859375 MB
Sequence created.
shared pool free memory = 373.39078521728515625 MB
nextval = 1
shared pool free memory = 373.36498260498046875 MB
nextval = 2
shared pool free memory = 373.36498260498046875 MB
create sequence test_seq start with 1 cache 10000000000000000000
ORA-00955: name is already used by an existing object
shared pool free memory = 373.36498260498046875 MB
nextval = 10000000000000000001
shared pool free memory = 373.36498260498046875 MB
nextval = 10000000000000000002
shared pool free memory = 373.36498260498046875 MB
Sequence dropped.
shared pool free memory = 373.06272125244140625 MB
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Event = row cache lock, Top Row Source = SEQUENCE, Executions = 2560 / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]