Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл  [new]
SangYong
Member [скрыт]

Откуда:
Сообщений: 651
вот так по ключу доступ к записи все норм:
update dbo.tbl_AllOrdersToSattelites set [Send] = 1 where id = 301287 


вот по не индексированному полю зависает и при просмотре блокировок
появляется блок, запрос сам не умирает - приходится его отменять
апдейт не проходит - хотя таже запись верхним запросом апдейтится норм
update dbo.tbl_AllOrdersToSattelites set [Send] = 1 where idZ = 6014


селект тоже норм:
select * from dbo.tbl_AllOrdersToSattelites where idZ = 6415


если линкнутся из MSA (линковка по ключу) , то руками можно единицы проставлять
как хочешь, фильтры и сортировки по idZ тоже норм - блокировок нет

все таблицы крутятся несколько лет - вот седня позвонили и я не смог
понять в чем дело - может кто что посоветует...пока перевел в ручной режим
простановку признака
25 окт 18, 17:11    [21715125]     Ответить | Цитировать Сообщить модератору
 Re: помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл  [new]
SangYong
Member [скрыт]

Откуда:
Сообщений: 651
триггеров на таблице не висит...
25 окт 18, 17:13    [21715130]     Ответить | Цитировать Сообщить модератору
 Re: помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
в индекс по idZ добавьте INCLUDE(Send)
25 окт 18, 17:23    [21715147]     Ответить | Цитировать Сообщить модератору
 Re: помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл  [new]
SangYong
Member [скрыт]

Откуда:
Сообщений: 651
это приведет к блокировке таблицы ? народ пока еще пашет...
25 окт 18, 17:31    [21715150]     Ответить | Цитировать Сообщить модератору
 Re: помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
индекс нужно перестроить, используйте окно обслуживания своей базы.
но сначала проанализируйте актуальные планы выполнения ваших запросов, возможно проблема не в этом
25 окт 18, 17:33    [21715152]     Ответить | Цитировать Сообщить модератору
 Re: помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл  [new]
invm
Member

Откуда: Москва
Сообщений: 9265
SangYong
появляется блок, запрос сам не умирает - приходится его отменять
sp_who2
И смотрите какая сессия блокирует ваш update.
25 окт 18, 17:37    [21715158]     Ответить | Цитировать Сообщить модератору
 Re: помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл  [new]
SangYong
Member [скрыт]

Откуда:
Сообщений: 651
нет блокировок

пока костыль поставил:
 update dbo.tbl_AllOrdersToSattelites set idZ_Sended = 1 
 where id in (Select  id from  dbo.tbl_AllOrdersToSattelites  where idZ = 6415)


криво но отрабатывает...
25 окт 18, 17:51    [21715180]     Ответить | Цитировать Сообщить модератору
 Re: помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31326
SangYong
вот так по ключу доступ к записи все норм:
update dbo.tbl_AllOrdersToSattelites set [Send] = 1 where id = 301287 



вот по не индексированному полю зависает и при просмотре блокировок
появляется блок, запрос сам не умирает - приходится его отменять
апдейт не проходит - хотя таже запись верхним запросом апдейтится норм
update dbo.tbl_AllOrdersToSattelites set [Send] = 1 where idZ = 6014
Что то странное... База то не битая? Чекдб делали?
25 окт 18, 18:53    [21715257]     Ответить | Цитировать Сообщить модератору
 Re: помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл  [new]
invm
Member

Откуда: Москва
Сообщений: 9265
SangYong
пока костыль поставил:
 update dbo.tbl_AllOrdersToSattelites set idZ_Sended = 1 
 where id in (Select  id from  dbo.tbl_AllOrdersToSattelites  where idZ = 6415)



криво но отрабатывает...
Это как раз и подтверждает, что первоначальный запрос блокировался другой сессией.
25 окт 18, 18:59    [21715262]     Ответить | Цитировать Сообщить модератору
 Re: помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
Разберитесь с локом, какой-то апдейт видимо держит одну из записей таблицы.
Ну и индекс по полю idZ не помешает.

create index IDX_tbl_AllOrdersToSattelites_idZ
on dbo.tbl_AllOrdersToSattelites ( idZ )
with (online = on)


Можно в онлайне, не блокируя пользователей, если редакция сервера позволяет.
25 окт 18, 19:57    [21715335]     Ответить | Цитировать Сообщить модератору
 Re: помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл  [new]
invm
Member

Откуда: Москва
Сообщений: 9265
Владимир Затуливетер
какой-то апдейт видимо держит одну из записей таблицы.
select держит, не update.
25 окт 18, 20:00    [21715341]     Ответить | Цитировать Сообщить модератору
 Re: помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл  [new]
SangYong
Member [скрыт]

Откуда:
Сообщений: 651
Чекдб не делал - я про нее сначала почитаю :) .

Повторюсь - из MSAccess я могу редактировать именно
эту запись (равно как и другие) - проблем нет. Но MSA по ключу к ней линкуется.
По ключу и у меня все редактируется. Не редактируется по полю, не состоящему
в индексах. А костыль нормально отдупляется. Ну были бы там триггеры - я бы их
перебрал насчет ошибок...

Наличие блокировок и активных процессов проверяю:

SELECT sess.[login_name], sess.[host_name], qs.start_time, sess.last_request_start_time, object_schema_name(st.objectid, st.dbid) 
                         + '.' + object_name(st.objectid, st.dbid) AS [Procedure], CASE WHEN qs.sql_handle IS NULL THEN ' ' ELSE (substring(st.text, (qs.statement_start_offset + 2) / 2, 
                         (CASE WHEN qs.statement_end_offset = - 1 THEN len(CONVERT(nvarchar(MAX), st.text)) * 2 ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2)) END AS query_text, sess.cpu_time, 
                         qs.logical_reads, qs.writes, sess.session_id, CASE WHEN qs.wait_type = 'CXPACKET' AND qs.blocking_session_id = 0 THEN cp.[blocked] ELSE qs.blocking_session_id END AS blocking_id, 
                         isnull(NULLIF (qs.wait_resource, ''), cp.[waitresource]) AS waitresource, qs.wait_time, qs.wait_type, CONVERT(xml, pl.query_plan) _plan, rgwg.[name]
FROM            sys.dm_exec_sessions sess /* To get blocking info for parallel queries*/ OUTER apply
                             (SELECT        TOP 1 blocked, esp.waitresource
                               FROM            master.dbo.sysprocesses esp
                               WHERE        esp.spid = sess.session_id AND esp.blocked > 0 AND esp.blocked <> esp.spid) cp INNER JOIN
                         sys.dm_exec_requests qs ON qs.session_id = sess.session_id AND qs.[wait_type] NOT IN ('BROKER_RECEIVE_WAITFOR', 'BROKER_TASK_STOP') LEFT JOIN
                         sys.dm_exec_procedure_stats ps ON ps.sql_handle = qs.sql_handle AND ps.[plan_handle] = qs.[plan_handle] OUTER apply master.sys.dm_exec_sql_text(qs.sql_handle) st OUTER 
                         apply sys.dm_exec_text_query_plan(qs.plan_handle, qs.statement_start_offset, qs.statement_end_offset) pl INNER JOIN
                         sys.resource_governor_workload_groups AS rgwg ON rgwg.[group_id] = sess.[group_id]
WHERE        (sess.[host_name] IS NOT NULL )


пока сам в дизориентации...всем спсб
25 окт 18, 22:05    [21715432]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить