powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как вы боритесь с блокировками?
14 сообщений из 39, страница 2 из 2
Как вы боритесь с блокировками?
    #33630918
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
вот я об этой привычке и говорил.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как вы боритесь с блокировками?
    #38106108
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подниму тему, у меня есть функция, которая возвращает table.

Код: 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.
CREATE OR REPLACE FUNCTION FINTOOLS.BFC (
    par1
  RETURNS TABLE  (
    ID_L	INTEGER,
    ID_T	INTEGER,
    ID_F	INTEGER,
    VALUE	DECIMAL(31, 14) )
  SPECIFIC SQL091123141987654
  LANGUAGE SQL
BEGIN ATOMIC
   RETURN WITH rec1 (BOOK_DATE, ID_L, ID_T, ID_F, VALUE)
               AS (SELECT t1.BOOK_DATE,
                          t1.ID_LIABILITY,
                     FROM TRANSACTION.LIABILITY_SDEPO t1 
                    WHERE t1.ID_PERSON_FUND IN
                             (SELECT 3,5)
                                           ,
               rec2 (BOOK_DATE, BOOK_DATE_END, VALUE)
               AS (SELECT t1.BOOK_DATE,
                         СURRENT_DATE
                       ,
                             date ('9999-01-01')),
                             7
                     FROM rec1 t1)
          SELECT ID_L,
                 ID_T,
                 ID_F,
                 VALUE
            FROM rec2
           WHERE     CURRENT_DATE BETWEEN BOOK_DATE AND CURRENT DATE
                 AND VALUE <> 0  with ur ;
END;



В ней хочу поставить опцию with UR; - Для того чтобы не было блокировок.
Получаю ругачку : [i] The isolation clause is ignored because of the statement context.

Можно как то побороть?
...
Рейтинг: 0 / 0
Как вы боритесь с блокировками?
    #38106190
GVF112GVF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Как вы боритесь с блокировками?
    #38106235
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GVF112GVF,
Спасибо, но я не нашёл там ограничения на функции. У меня версия не 10, а 9.7.
У меня в 2-х местах ошибки и пока разбирался - нашёл глюк в том, что если в функции используется select не из таблицы, а из NIKNAMES , то вот она ошибка, если заменяем на таблицу то всё окей. Какие пути развития есть, тоесть как бы сделать так , что бы в функции и NIKNAME остался и уровень изоляции можно было поставить UR.
Спасибо!
...
Рейтинг: 0 / 0
Как вы боритесь с блокировками?
    #38106340
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoedПодниму тему, у меня есть функция, которая возвращает table.
...
В ней хочу поставить опцию with UR; - Для того чтобы не было блокировок.
Получаю ругачку : [i] The isolation clause is ignored because of the statement context.

Можно как то побороть? В DB2 можно в подзапросах использовать isolation clause.
Типа:

Код: sql
1.
2.
3.
4.
select *
from mytable t
, table(select * from table(FINTOOLS.BFC(t.mycolumn)) with ur) f
where ...



Но для nickname это не работает, и в этом случае вы можете только указать изоляцию для всего запроса типа:

Код: sql
1.
2.
3.
4.
5.
select *
from mytable t
, table(FINTOOLS.BFC(t.mycolumn)) f
where ...
with ur
...
Рейтинг: 0 / 0
Как вы боритесь с блокировками?
    #38106377
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein,
Марк, спасибо - что откликнулись! Оптимизация в DB2 - вещь просто тяжелая.
В MSSQL я могу у каждой таблицы sometable (nolock) могу ставить и не париться, в DB2 это жесть!!!
В том то и проблема, что если я использую with ur для всей функции,
где есть NikName - ошибка, если ставлю вместо NikName - обычную таблицу , то ошибки нет.

Задам ещё вопрос, как мне в функции, в которой используется автономная транзакция, заюзать with UR;

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE FUNCTION "F"."BFCUR" (
    "ID"	INTEGER
    )
  RETURNS TABLE  (ID INTEGER)

BEGIN ATOMIC
      DECLARE ADATE_OTH   DATE;
          with rec21 (ID) as 
            (select ID
            from BALANCE.BANKR
            )
             SELECT 
                    ID
               FROM rec21
             with ur;  
   END;
 
...
Рейтинг: 0 / 0
Как вы боритесь с блокировками?
    #38106431
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoed,

Я, наверное, не очень понятно выразился.
Не используйте указание isolation clause в функциях.
Если надо, используйте указание уровня изоляции в запросе, который использует эту функцию.

Кроме того, если у вас параметр базы cur_commit = ON (это умолчание для вновь создаваемых в 9.7 базах) и вы работаете на уровне изоляции CS (уровень по-умолчанию), то на нём писатели не блокируют читателей.
...
Рейтинг: 0 / 0
Как вы боритесь с блокировками?
    #38106477
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinsteinmedoed,

(это умолчание для вновь создаваемых в 9.7 базах) и вы работаете на уровне изоляции CS (уровень по-умолчанию)

Вот тут немного не понятно, для вновь создаваемых чего.
Функции мигрировали с 8 - ки на 9.7 - их никак не перекомпилировали!
...
Рейтинг: 0 / 0
Как вы боритесь с блокировками?
    #38106589
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoedВот тут немного не понятно, для вновь создаваемых чего.Баз данных.
Cursor stability (CS) level behavior for newly created databases has been changed .
Т.е. если вы в 9.7 сделали
CREATE DATABASE MYDB ...
то этот параметр будет в ON по-умолчанию.
Если вы мигрировали базу с предыдущей версии, то этот параметр (он не существовал ранее) установится в OFF, и его, если надо, можно потом выставить в ON.
medoedФункции мигрировали с 8 - ки на 9.7 - их никак не перекомпилировали!"Мигрировали функции" - это что значит?
Саму базу мигрировали командой UPGRADE DATABASE или просто пересоздали командой CREATE FUNCTION?
...
Рейтинг: 0 / 0
Как вы боритесь с блокировками?
    #38106708
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein,

Уточнил у админа
1) Саму базу мигрировали командой UPGRADE DATABASE
2) Скоро поставим cur_commit = ON и задача по переписыванию функций (оптимизации на грязное чтение)
сама отпадёт.
Спасибо - вопрос закрыт.
...
Рейтинг: 0 / 0
Как вы боритесь с блокировками?
    #38117740
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения с закрытием. Опыта у меня маловато, а блокировки не прекращаются (читателей).
Дано:
1) База мигрирована c 8-ки на 9-ку командой : UPGRADE DATABASE.
2) Параметр CUR_COMMIT установлен в ON.
3) Запрос select CURRENT ISOLATION as iso_level
from SYSIBM.SYSDUMMY1 - возвращает пустоту.

Я так понимаю - сейчас на базе уровень изоляции не установлен (берется из пакетов).

Чтобы установить уровень изоляции на базу, в батнике нужно прописать так:
db2 terminate
db2 change isolation to CS
db2 connect to sample

Верно или я в чем то запутался?
...
Рейтинг: 0 / 0
Как вы боритесь с блокировками?
    #38119121
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoed,

Разберитесь кто и кого блокирует.
Если блокируются запросы из процедур, которые были созданы до переключения cur_commit в ON, то пакетам процедур надо rebind.
Monitoring database locking
...
Рейтинг: 0 / 0
Как вы боритесь с блокировками?
    #38119542
Фотография medoed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Если блокируются запросы из процедур, которые были созданы до переключения cur_commit в ON, то пакетам процедур надо rebind.

Процедур почти нет, функции возвращают данные, а вся логика на толстом клиенте - тоесть update и insert формирутся автоматически. Rebind - производится еженедельно!

Насчет монитора - Monitoring database locking , админ сказал, что он сильно систему нагружает!

А нет никакой функции или системной процедуры, типа sp_lock - в конкретный момент, чтоб было видно кому плохо и от кого (от какого запроса). Марк - у Вас нет такой доработки?
...
Рейтинг: 0 / 0
Как вы боритесь с блокировками?
    #38120074
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
medoedНасчет монитора - Monitoring database locking , админ сказал, что он сильно систему нагружает!

А нет никакой функции или системной процедуры, типа sp_lock - в конкретный момент, чтоб было видно кому плохо и от кого (от какого запроса). Марк - у Вас нет такой доработки?
Есть SYSIBMADM.MON_LOCKWAITS .
Больше информации о заблокированном запросе можно получить из MON_GET_APPL_LOCKWAIT .
Но проблема этих запросов в том, что вы можете не увидеть там запроса, который ресурс заблокировал. Например, этот запрос мог изменить данные и завершится (стал неактивным), а наложенные им блокировки будут висеть до конца таранзакции. В MON_LOCKWAITS показывается только активный в данный момент запрос блокирующей транзакции, который может быть совсем не тем, который заблокировал ресурс.
Т.е. вы не получите без монитора блокировок историю запросов блокирующей транзакции, без чего может быть непонятно, что же за запрос заблокировал записи.
Такую историю запросов активной транзакции можно получить только на сервере командой:
Код: plaintext
db2pd -db  mydb  -apinfo  appl_handle 
но для нее нет sql интерфейса и запускать ее может только пользователь с SYSADM правами.
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как вы боритесь с блокировками?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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