Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Ase 12.5 переполнение transection log и locks / 6 сообщений из 6, страница 1 из 1
10.05.2010, 13:29
    #36619558
St.limp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ase 12.5 переполнение transection log и locks
Имеется несколько команд вида "insert into TABLE select * from VIEW". Во время выполнения, если текущее количество записей превышает number of locks, происходит переполнение transaction log. Подскажите пожалуйста возможные варианты решения.
Вариант увеличить значение locks не подходит. Заранее спасибо.

Есть мысль вставлять данные по частям. Каким образом можно это сделать? (Как селектить, например, по 100 записей из VIEW?)
...
Рейтинг: 0 / 0
13.05.2010, 01:00
    #36624545
GooSergey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ase 12.5 переполнение transection log и locks
Можно попробовать в цикле по первичному ключу по N записей
SELECT @lim = COUNT(*) FROM Table1
SELECT @i = 1
WHILE @i< @lim
INSERT INTO Table2 (...) SELECT ... FROM Table1 WHERE [первичный ключ] BETWEEN @i TO @i+N
SELECT @i = @i+N
...
Рейтинг: 0 / 0
13.05.2010, 01:02
    #36624548
GooSergey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ase 12.5 переполнение transection log и locks
Лучше вместо COUNT использовать MAX(первичный_ключ)
...
Рейтинг: 0 / 0
18.05.2010, 11:02
    #36633551
konst541
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ase 12.5 переполнение transection log и locks
GooSergey,
будьте внимательны необязательно постоянно увеличивается.
...
Рейтинг: 0 / 0
19.05.2010, 11:51
    #36635949
golsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ase 12.5 переполнение transection log и locks
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
set rowcount  100             -- размер порции

select @i =  1                -- для первого входа в цикл

while @i >  0 
begin

  INSERT INTO Table2 (...)  -- добавляем отсутствующие записи
  SELECT ... FROM Table1 
  WHERE not exists (SELECT ... FROM Table2 WHERE ...)

  select @i = @@rowcount    -- число записей обработанных в INSERT 

end

Если данные позволяют, то вместо условия
not exists (SELECT ... FROM Table2 WHERE ...)
можно использовать
<field Table1> not in (SELECT <field Table2> FROM Table2 WHERE ...)
...
Рейтинг: 0 / 0
27.05.2010, 14:27
    #36652968
St.limp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ase 12.5 переполнение transection log и locks
Спасибо за помощь, но все эти способы не совсем подходят, т.к. процедура будет повторяться для нескольких таблиц, а у них у всех разные первичные ключи.

Проблема была решена с помощью утилиты bcp, но время работы значительно увеличилось. Поэтому от bcp отказался.

Возможны ли какие-нибудь ещё варианты решения?
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Ase 12.5 переполнение transection log и locks / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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