powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Нестабильные апдейты
9 сообщений из 9, страница 1 из 1
Нестабильные апдейты
    #32641395
Comandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть база данных на Sybase 11.0.3.3. и приложение на Java. Java приложение вызывает хранимую процедуру, в которой есть update. Так вот, этот самый update с некоторых пор стал не стабильно работать. Т.е. 50 вызовов обновляют требуемое колличество записей, 51-й только одну из набора или вообще ничего не обновляет. Если останавливаю выполение программы, запускаю процедуру из DB Artisan с теми же параметрами, то update работает как положенно, обновляет полный набор. Вобщем, какой то бред. Думали что может проблема в Java SDK, пробовали разные, 1.2, 1.3, 1.4, обновляли Sybase JDBC драйвер, но результат тот же, - фигня, процедура работает, а затем, в какой то момент начинает давать сбои при этом не давая никаких ошибок.

Чую что проблема в SQL сервере, но наш админ базы данных пока ничем помочь не может.

Господа, кто сталкивался с чем нибудь подобным? У меня уже кончились идеи. :-(

create procedure X1

insert into #t /* таблица #t создается заранее перед вызовом данной процедуры */
select ....
from grid
where ...

insert into #t
select ....
from grid
where ...

update grid
set ...
from #t, grid
where ...
...
Рейтинг: 0 / 0
Нестабильные апдейты
    #32641618
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сразу в начале процедуры добавьте
set rowcount 0
set nocount on -- на всякий случай.

может дело и не в этом, но вдруг поможет ...

Ежели нет, то нужно какое-то более полное описание ошибок и полный текст процедуры с описанием таблиц.
Кстати, триггера на таблице есть ?
...
Рейтинг: 0 / 0
Нестабильные апдейты
    #32641729
Comandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivсразу в начале процедуры добавьте
set rowcount 0
set nocount on -- на всякий случай.

может дело и не в этом, но вдруг поможет ...

Ежели нет, то нужно какое-то более полное описание ошибок и полный текст процедуры с описанием таблиц.
Кстати, триггера на таблице есть ?

Спасибо, MasterZiv.

rowcount / nocount добавлять нет смысла, т.к. процедура все же через раз работает. Приложением так же вызываются 100 других процедур и у меня теперь нет уверенности что они не сбоят. Все их не буду редактировать - нет возможности. К тому же обнаружился select с union(aми) который тоже работает через раз, - возвращает то одну запись, то положенные десять. Вобщем, проблема не в одном месте.


Не знаю какое еще можно добавить описание ошибок? Если дело идет об ошибках на сервере, то их нет, - SQL server не генерирует ничего подозрительного.

Тригера на таблице нет.

------------------------

Вот код.

- Вызывается процедура rate_main.
- rate_main создает временную таблицу и вызывает rate_totals.
- rate_totals заполняет временную таблицу данными и запускает update. Вот результат этого updatea и получается различный.


CREATE PROCEDURE rate_main
@wip_no char(10),
@wip_iteration_no char(2),
@app_mode char(1)


AS

BEGIN

...


IF OBJECT_ID('#t') IS NOT NULL
DROP TABLE #t

CREATE TABLE #t
(
wip_no char(10) NOT NULL,
wip_iteration_no char(2) NOT NULL,
location_no smallint NOT NULL,
sect_obj_no int NOT NULL,
risk_obj_no int NOT NULL,
cov_obj_no int NOT NULL,
tot_prem_amt money NULL,
end_prem_amt money NULL,
offset_prem_amt money NULL,
onset_prem_amt money NULL,
base_prem_amt money NULL,
sbase_prem_amt money NULL,
scalc_prem_amt money NULL,
disc_amt money NULL,
sur_amt money NULL,
add_sur_amt money NULL,
oth_disc_amt money NULL,
chg_tax_1_amt money NULL,
chg_tax_2_amt money NULL,
chg_tax_3_amt money NULL,
chg_tax_4_amt money NULL,
chg_tax_5_amt money NULL,
chg_tax_6_amt money NULL,
chg_tax_7_amt money NULL,
new_impl_prem_amt money NULL)




begin tran

.....


-- update totals
exec @status = rate_totals @wip_no, @wip_iteration_no
if @status <> 0
goto err_exit


commit tran
return

err_exit:
rollback
return
END



авторCREATE PROCEDURE dbo.rate_totals
@wip_no char(10),
@wip_iteration_no char(2)
AS
BEGIN


-- total for risk
insert into #t
select distinct
wip_no, wip_iteration_no,
location_no,
sect_obj_no,
risk_obj_no,
0 cov_obj_no,
sum(tot_prem_amt) TOT_PREM_AMT,
sum(end_prem_amt) END_PREM_AMT,
sum(offset_prem_amt) OFFSET_PREM_AMT,
sum(onset_prem_amt) ONSET_PREM_AMT,
sum(base_prem_amt) BASE_PREM_AMT,
sum(sbase_prem_amt) SBASE_PREM_AMT,
sum(scalc_prem_amt) SCALC_PREM_AMT,
sum(disc_amt) DISC_AMT,
sum(sur_amt) SUR_AMT,
sum(add_sur_amt) ADD_SUR_AMT,
sum(oth_disc_amt) OTH_DISC_AMT,
sum(chg_tax_1_amt) CHG_TAX_1_AMT, sum(chg_tax_2_amt) CHG_TAX_2_AMT,
sum(chg_tax_3_amt) CHG_TAX_3_AMT, sum(chg_tax_4_amt) CHG_TAX_4_AMT,
sum(chg_tax_5_amt) CHG_TAX_5_AMT, sum(chg_tax_6_amt) CHG_TAX_6_AMT,
sum(chg_tax_7_amt) CHG_TAX_7_AMT,
NEW_IMPL_PREM_AMT = 0
from twrkgrid
where wip_no = @wip_no
and wip_iteration_no = @wip_iteration_no
and cov_obj_no >0
group by wip_no, wip_iteration_no, location_no, sect_obj_no, risk_obj_no


-- total for section
insert into #t
select wip_no, wip_iteration_no,
location_no,
sect_obj_no,
0 risk_obj_no,
0 cov_obj_no,
sum(tot_prem_amt) TOT_PREM_AMT,
sum(end_prem_amt) END_PREM_AMT,
sum(offset_prem_amt) OFFSET_PREM_AMT,
sum(onset_prem_amt) ONSET_PREM_AMT,
sum(base_prem_amt) BASE_PREM_AMT,
sum(sbase_prem_amt) SBASE_PREM_AMT,
sum(scalc_prem_amt) SCALC_PREM_AMT,
sum(disc_amt) DISC_AMT,
sum(sur_amt) SUR_AMT,
sum(add_sur_amt) ADD_SUR_AMT,
sum(oth_disc_amt) OTH_DISC_AMT,
sum(chg_tax_1_amt) CHG_TAX_1_AMT, sum(chg_tax_2_amt) CHG_TAX_2_AMT,
sum(chg_tax_3_amt) CHG_TAX_3_AMT, sum(chg_tax_4_amt) CHG_TAX_4_AMT,
sum(chg_tax_5_amt) CHG_TAX_5_AMT, sum(chg_tax_6_amt) CHG_TAX_6_AMT,
sum(chg_tax_7_amt) CHG_TAX_7_AMT,
NEW_IMPL_PREM_AMT = 0
from twrkgrid
where wip_no = @wip_no
and wip_iteration_no = @wip_iteration_no
and cov_obj_no > 0
group by wip_no, wip_iteration_no, location_no, sect_obj_no


-- total for location
insert into #t
select wip_no, wip_iteration_no,
location_no,
0 sect_obj_no,
0 risk_obj_no,
0 cov_obj_no,
sum(tot_prem_amt) TOT_PREM_AMT,
sum(end_prem_amt) END_PREM_AMT,
sum(offset_prem_amt) OFFSET_PREM_AMT,
sum(onset_prem_amt) ONSET_PREM_AMT,
sum(base_prem_amt) BASE_PREM_AMT,
sum(sbase_prem_amt) SBASE_PREM_AMT,
sum(scalc_prem_amt) SCALC_PREM_AMT,
sum(disc_amt) DISC_AMT,
sum(sur_amt) SUR_AMT,
sum(add_sur_amt) ADD_SUR_AMT,
sum(oth_disc_amt) OTH_DISC_AMT,
sum(chg_tax_1_amt) CHG_TAX_1_AMT, sum(chg_tax_2_amt) CHG_TAX_2_AMT,
sum(chg_tax_3_amt) CHG_TAX_3_AMT, sum(chg_tax_4_amt) CHG_TAX_4_AMT,
sum(chg_tax_5_amt) CHG_TAX_5_AMT, sum(chg_tax_6_amt) CHG_TAX_6_AMT,
sum(chg_tax_7_amt) CHG_TAX_7_AMT,
NEW_IMPL_PREM_AMT = 0
from twrkgrid
where wip_no = @wip_no
and wip_iteration_no = @wip_iteration_no
and cov_obj_no > 0
group by wip_no, wip_iteration_no, location_no


-- totals for policy
insert into #t
select wip_no, wip_iteration_no,
0 location_no,
0 sect_obj_no,
0 risk_obj_no,
0 cov_obj_no,
sum(tot_prem_amt) TOT_PREM_AMT,
sum(end_prem_amt) END_PREM_AMT,
sum(offset_prem_amt) OFFSET_PREM_AMT,
sum(onset_prem_amt) ONSET_PREM_AMT,
sum(base_prem_amt) BASE_PREM_AMT,
sum(sbase_prem_amt) SBASE_PREM_AMT,
sum(scalc_prem_amt) SCALC_PREM_AMT,
sum(disc_amt) DISC_AMT,
sum(sur_amt) SUR_AMT,
sum(add_sur_amt) ADD_SUR_AMT,
sum(oth_disc_amt) OTH_DISC_AMT,
sum(chg_tax_1_amt) CHG_TAX_1_AMT, sum(chg_tax_2_amt) CHG_TAX_2_AMT,
sum(chg_tax_3_amt) CHG_TAX_3_AMT, sum(chg_tax_4_amt) CHG_TAX_4_AMT,
sum(chg_tax_5_amt) CHG_TAX_5_AMT, sum(chg_tax_6_amt) CHG_TAX_6_AMT,
sum(chg_tax_7_amt) CHG_TAX_7_AMT,
sum(new_impl_prem_amt) NEW_IMPL_PREM_AMT
from twrkgrid
where wip_no = @wip_no
and wip_iteration_no = @wip_iteration_no
and cov_obj_no > 0
group by wip_no, wip_iteration_no


UPDATE TWRKGRID
SET TOT_PREM_AMT = b.tot_prem_amt,
END_PREM_AMT = b.end_prem_amt,
OFFSET_PREM_AMT= b.offset_prem_amt,
ONSET_PREM_AMT = b.onset_prem_amt,
BASE_PREM_AMT = b.base_prem_amt,
SBASE_PREM_AMT = b.sbase_prem_amt,
SCALC_PREM_AMT = b.scalc_prem_amt,
DISC_AMT = b.disc_amt,
SUR_AMT = b.sur_amt,
ADD_SUR_AMT = b.add_sur_amt,
OTH_DISC_AMT = b.oth_disc_amt,
CHG_TAX_1_AMT = b.chg_tax_1_amt, CHG_TAX_2_AMT = b.chg_tax_2_amt,
CHG_TAX_3_AMT = b.chg_tax_3_amt, CHG_TAX_4_AMT = b.chg_tax_4_amt,
CHG_TAX_5_AMT = b.chg_tax_5_amt, CHG_TAX_6_AMT = b.chg_tax_6_amt,
CHG_TAX_7_AMT = b.chg_tax_7_amt,
NEW_IMPL_PREM_AMT = b.new_impl_prem_amt,
TIMESTAMP = GETDATE()
from #t b
WHERE b.wip_no = twrkgrid.wip_no
and b.wip_iteration_no = twrkgrid.wip_iteration_no
and b.location_no = twrkgrid.location_no
and b.sect_obj_no = twrkgrid.sect_obj_no
and b.risk_obj_no = twrkgrid.risk_obj_no
and b.cov_obj_no = twrkgrid.cov_obj_no
END


На таблице, как положенно, уникальный индекс по используемым ключам.
авторCREATE UNIQUE NONCLUSTERED INDEX xtwrkg
ON dbo.twrkgrid(wip_no,wip_iteration_no,location_no,sect_obj_no,risk_obj_no,cov_obj_no)
...
Рейтинг: 0 / 0
Нестабильные апдейты
    #32642331
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дай еще определение (полное, с индексами и констрейнтами) таблицы TWRKGRID и других используемых (кроме временной), если они есть (я сходу вроде только TWRKGRID увидел).

На вскидку ощущение что вы GROUP BY неправильно пишите, раз уж вам потребовалось DISTINCT писать. Посмотрю.
...
Рейтинг: 0 / 0
Нестабильные апдейты
    #32642385
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, с GROUP BY все в порядке.

в
-- total for risk
insert into #t
select distinct ...

надо убрать DISTINCT, он не нужен и вреден - если потом внесете ошибку в запрос, DISTINCT будет ее скрывать.

Проблема может быть в самом update,

UPDATE TWRKGRID
SET TOT_PREM_AMT = b.tot_prem_amt,
...
from #t b

здесь важно, чтобы записи в TWRKGRID и #t b соотносились друг с другом как 1:1 по условию

b.wip_no = twrkgrid.wip_no
and b.wip_iteration_no = twrkgrid.wip_iteration_no
and b.location_no = twrkgrid.location_no
and b.sect_obj_no = twrkgrid.sect_obj_no
and b.risk_obj_no = twrkgrid.risk_obj_no
and b.cov_obj_no = twrkgrid.cov_obj_no

Если этого не будет, будут ошибки. А чтобы это понять, надо данные видеть.
Можно даже написать проверку перед UPDATE, что в TWRKGRID есть одна и только одна запись для каждой записи в #t, производительность это сильно не должно затронуть, поскольку есть индекс.
...
Рейтинг: 0 / 0
Нестабильные апдейты
    #32642581
Comandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivДай еще определение (полное, с индексами и констрейнтами) таблицы TWRKGRID и других используемых (кроме временной), если они есть (я сходу вроде только TWRKGRID увидел).
Только TWRKGRID используется.

Код: plaintext
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.
CREATE TABLE dbo.twrkgrid 
(
    wip_no                char(10)      NOT NULL,
    wip_iteration_no      char(2)       NOT NULL,
    location_no           smallint      NOT NULL,
    sect_obj_no           int           NOT NULL,
    risk_obj_no           int           NOT NULL,
    cov_obj_no            int           NOT NULL,
...
    policy_no             char(10)      NULL,
...
    chg_tax_1_amt         money         NULL,
    ...
    chg_tax_7_amt         money         NULL,
    offset_prem_amt       money         NULL,
    onset_prem_amt        money         NULL,
    end_prem_amt          money         NULL,
    USR_ENT_ENDPRM_AMT    money         NULL,
...
)
go

CREATE NONCLUSTERED INDEX polno
    ON dbo.twrkgrid(policy_no)
go

CREATE UNIQUE NONCLUSTERED INDEX xtwrkg
    ON dbo.twrkgrid(wip_no,wip_iteration_no,location_no,sect_obj_no,risk_obj_no,cov_obj_no)
go



MasterZivнадо убрать DISTINCT, он не нужен и вреден - если потом внесете ошибку в запрос, DISTINCT будет ее скрывать.
Да, и правда, не пойму зачем нужен был distinct если есть group by. Попробую поменять.

MasterZivПроблема может быть в самом update,
...важно, чтобы записи в TWRKGRID и #t b соотносились друг с другом как 1:1 по условию
По определению так и должны относиться.


Эти процедуры активно используются года три на других базах. А на новом внедрении вдруг заметили глюки, которых нет на других серверах. Вопрос был о неожиданной сбойности процедур. Ну не понимаю я как может одна и та же процедура давать разные результаты на одних и тех же данных в одном из пяти - десяти тестов. Может тех поддержка Sybasе объяснит. Сегодня отправил им запрос, врочем, они не очень оптимистичны, т.к. версия сервера старая 11.0.3.

MasterZiv, спасибо.
...
Рейтинг: 0 / 0
Нестабильные апдейты
    #32647460
Comandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уф. Нашел вчера проблему.

Где то, в коде приложения, затерялся set rowcount 1 , который, ежели раз запушен, устанавливает ограничение на select/insert/update на все соединение. Так как приложение многопоточное и соединение то отдавалось в пул, то доставались из него различными потоками, то это и давало трудноуловимый эффект нестабильности работы с сервером.

Прикольно. Только жалко, что неделя трудов ушла на отлов глюка.
...
Рейтинг: 0 / 0
Нестабильные апдейты
    #32648291
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а я что тебе говорил примерно неделю назад ?
...
Рейтинг: 0 / 0
Нестабильные апдейты
    #32648477
Comandor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivНу а я что тебе говорил примерно неделю назад ?
Эх, та отож....
;-)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Нестабильные апдейты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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