|
|
|
UPDATE приводит к ОГРОМНЫМ РАЗМЕРАМ transaction log
|
|||
|---|---|---|---|
|
#18+
есть две таблицы: T1 (IDnew identity, IDold, ...) - 200 000 записей T2 (IDold, ...) - 4 000 000 записей размер всей базы до UPDATE 1,7 ГБ, после - базы 2,3 (DATA) + 5,5 (LOG)!!! update T2 set IDold=(select top 1 IDnew from T1 where T1.IDold=T2.IDold) что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2002, 10:32:23 |
|
||
|
UPDATE приводит к ОГРОМНЫМ РАЗМЕРАМ transaction log
|
|||
|---|---|---|---|
|
#18+
А что вас собственно удивляет ? То, что таким образом соблюдается целостность данных ? А если вы потом захотите отменить изменения то откуда сервер по-вашему должен будет взять предыдущее состояние ? Или вас волнует вопрос сжатия transaction log-а ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2002, 11:06:29 |
|
||
|
UPDATE приводит к ОГРОМНЫМ РАЗМЕРАМ transaction log
|
|||
|---|---|---|---|
|
#18+
как сжимать log известно, но тогда уточню суть задачи 1) отменять изменения не понадобится - такая операция проводится над базой 1 раз (максимум/возможно 2-3) 2) откуда взялся вопрос: переполнился log, места на диске не хватило (было ~3 ГБ) 3) нет никакой гарантии, что там где будет выполнятся update (разные организации - разное железо) будет достаточно места (тем более если T2 будет иметь 20 000 000 записей) - а надо чтобы он сработал в любом случае пробовал вместо update использовать курсор - лог небольшой, но время выполнения... может лог такой потому что операция обновления каждой строки разбивается на Delete и Insert? нельзя ли как-нибудь указать серверу делать непосредственное обновление? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2002, 12:42:53 |
|
||
|
UPDATE приводит к ОГРОМНЫМ РАЗМЕРАМ transaction log
|
|||
|---|---|---|---|
|
#18+
1) отменять изменения не понадобится А если во время запроса произойдет сбой питания ? Лог для того и нужен чтобы можно было отменить изменения. А по желанию пользователя или автоматически это уже второй вопрос. Ваша транзакция затрагивает 4 000 000 записей. А так как транзакция едина и неделима, т.е. либо все 4 000 000 записей будут обновлены, либо ни одна не будет, то и лог растет соотвественно объему задействованных в запросе записей. пробовал вместо update использовать курсор - лог небольшой, но время выполнения Придется выбирать - либо одна большая транзакция и большой размер лога, либо много маленьких транзакций и маленький размер лога. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2002, 13:02:36 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3383&tid=1819032]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
21ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
20ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 271ms |

| 0 / 0 |
