|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
Есть таблица 71 млн записей. Не фрагментированная. Экстенты закончились. Что делать? Прочитал FAQ . Поменял тип таблицы на RAW. Попробывал отфрагментировать. Получил long transaction aborted . Попробывал удалить все записи что бы потом их снова загрузить. При удалении получил ошибку no more locks Как теперь можно уменьшить число экстентов ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 17:15 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
Ещё попутно вопрос, что бы поменять тип таблицы на RAW нужно удалять тригеры? Я не удалял, и тип поменялся, но в документации читал что RAW таблица не может иметь тригеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 17:21 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
ga, чтобы избежать длинной транзакции, удалять можно по частям ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 17:55 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
ga Прочитал FAQ . Арт Кагель там дает три варианта - воспользуйтесь. Причём тут RAW и размер экстента? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 18:13 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
выгрузить табл удалить заново создать с большими экстентами загрузить табл не забыть про индкс и тд ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 18:33 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 18:40 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
Ikir, Попробывал 2 из трёх вариантов. Тот кторый с фрагментированием у меня не получился из за того что выполнение команды Код: sql 1.
завершилось ошибкой long transaction aborted Поробывал тот который с выгрузкой: выгрузил в файл - всё в порядке. Начал удалять: Код: sql 1.
- команда завершилась ошибкой no more locks . Как посоветовал Leonid Belov, попробую частями удалить. Надеюсь получится)) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 19:00 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
Вместо DELETE FROM используйте DROP TABLE и будет счастье и не будет длинной транзакции и не кончатся блокировки (что бы они не кончились при DELETE сначала залочте таблицу в эксплюзивном режиме - потратится все одна блокировка) . Сразу при пересоздани таблицы приделайте фрагментирование и подумайте не сделать ли его с запасом на будущее. Когда будете заново заполнять таблицу, то при наличии HDR/RSS вам НЕ надо следовать полезнейшему совету "создайте индексы после заполнения таблицы" резко повышающему скорость заполнения - логирование создания большого индекса может вызовать длинную транзакцию (зависит конечно от количества и длины полей в индексе). При HDR/RSS cоздайте таблицу с индексами и заполняйте порциями по (10-100 тысяч). Без HDR/RSS - создаёте таблицу без логирования, заполняете, cоздаёте индексы и переводите таблицу в логируемые. И всё это время верьте что 71 миллионов это мало, а много это таблица которая в этом году у нас дорастёт до миллиарда строк :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 21:59 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
Яковлев Павел, Так а если в одной транзакции удалять много данных она не будет длинной? Не получится ли это шило на мыло?) Миллиард записей это конечно юбилей)) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 23:01 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
Как вообще фрагментируют таблицы большие, когда в них данных много? Что бы не получить long transaction. Выгружают предварительно данные? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 11:02 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
ga, бардак в теории у вас... Вы проблему уже решили или решаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 11:24 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
АнатоЛойga, бардак в теории у вас... Вы проблему уже решили или решаете? На счёт бардака - возможно. Проблему решаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 11:31 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
Если не ошибаюсь, еще на 9.21 подобную проблему(выбрали доступное место для нефрагментированной таблицы) решали так: 1. Переименовали проблемную таблицу. 2. создали пустую фрагментированную таблицу с аналогичной структурой. 3. Приаттачили старый кусок к этой таблицей Здесь могу ошибиться - приаттачили или просто долили со старой. Относительно приаттачить - пример(без переименований) для пустой БД такой: create table test_1 ( id integer ) in dbs01 ; insert into test_1 select tabid from systables ; create table test_2 ( id integer ) fragment by expression (id > 100) in dbs02 , remainder in dbs03 ; alter fragment on table test_2 attach test_1 as partition p1 id <=100 ; относительно удаления всех записей - вам подсказывают пересоздать таблицу. Есть еще чудный оператор truncate. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 11:33 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
truncate не во всех версиях, ТС про версию молчит. вариантов много: при наличии свободного места в дбспейсах: 1. бороться с лонг транзекшн путем конфигурирования сервера или 2. воспользоваться предложением яфшуеи с аттачем иначе выгрузка данных, удаление данных + изменение таблицы и заливка данных по новой. при этом удаление данных через делете + альтер тейбл или через дроп+криэйт зависит от того, насколько вы со структурой бд на ты... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 11:49 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
АнатоЛойtruncate не во всех версиях, ТС про версию молчит. Да вы правы. Версия 10.00.UC1. Без truncate. яфшуеі за пример спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 12:09 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
gaЯковлев Павел, Так а если в одной транзакции удалять много данных она не будет длинной? Не получится ли это шило на мыло?) Миллиард записей это конечно юбилей)) "много данных" не бывает. бывает их больше чем логи позволяют. всё зависит от - размера одной строки - сколько строк вы удалите/добавите за раз - количества у вас логических журналов - размера одно логического журнала - настроек блокировки/отката длинной транзакции - ну и для поолноты - от настройки автодобавки журналов длинная транзакция это, если по простому, попытка отъесть почти все логи при достижении порога блокировки все прочие транзакции встают в наивной надежде что если не мешать длинной, то авось она таки успеет завершиться при достижении порога отката розовая наивность покидает систему, наступает отрезвление и она начинает принудительно откатывать длинную транзакцию. если я не ошибаюсь в понимании (в явном виде ни где не читал), откат несколько менее потребляет логи. по этому порог отката не тупо 50% а выше если места для отката не хватило - каюк - читайте в это форуме кто как нарвался (в основно поставив один из порогов почти в 100) и чем спася короче - всё (при нормальных настройках) завист от того сколько данных захотите вставить/удалить/изменить за раз мы обычно делаем массовые изменения порциями по 1-10-100 тысяч - завист от настроения и фазы луны (журналов к нас 512 по 20 метров + настройка автодобавки и под неё есть место) возможно у вас очень мало журналов и очень огромные строки, но хоть 1000 ту за раз наверно можете себе позволить и опять-таки - не мучте систему если удаляете всё - удалите таблицу через DROP TABLE - она логируется как одно действие и занимает в журнала всего байт 100 и так же моментально выпоняется по HDR/RSS ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 21:32 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
gaКак вообще фрагментируют таблицы большие, когда в них данных много? Что бы не получить long transaction. Выгружают предварительно данные? командой ALTER FRAGMENT :) это намёк что всё зависит от того для чего у вас таблица и какие по ней выборки скажем, лог кликов - изумительно фраментируется по дате клика. один год - один фрагмент. и плюшки в виде способности оптимизатора при выборке дата >= "2012-01-01 00:00:00" сразу пропускать фраменты в которых дата ранее этого времени. и плюшки в виде включения DATASKIP, бэкапа ненужных дбспейсов и их сноса что б место заново использовать. сильно понадобится - из бэкапа временно обратно можно прикрутить быстрее чем заново загрузкой в конце года (скажем декабрь) добавляем дбспейсы/место под данные для нового года, добавляем фрагмент (очень рекомендую FORCE_DDL_EXEC=1) и радуемся. если такого откровенно удобного столбца нет, то хоть по SERIAL фрагментируйте - поможет от окончания максимального количества страниц в таблице (буквально сегодня нарвались, ибо в системе упреждающего предупреждения бага была и она не оповестила что "конец близок") и не забывайте фрагметировать индексы так же и в туда же ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 21:49 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
gaКак вообще фрагментируют таблицы большие, когда в них данных много? Что бы не получить long transaction. Выгружают предварительно данные? что-то не про то сначала написал (как создать и поддерживать), а не как быть когда припёрло варианты вам уже описали - да, тупо выгрузить, дропнуть, залить в новую таблицу с уж правильной фрагментацией - не хотите выгружать - RAW-mode и вперёд - не хотите выгружать - добавить до фига места под логи и ALTER FRAGMENT - не хотите выгружать - добавить до фига место под новую таблицу с правильной фрагментацией и переливать в ней. потом дропнуть старую ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 21:54 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
Вообще уже девелоперам из IBM пора бы исправить в новых версиях это дурацкое ограничение на кол-во страниц в таблице. Реально иногда бесит, и нормального инструмента в базе для мониторинга такой ситуации нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2013, 21:06 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
AndronВообще уже девелоперам из IBM пора бы исправить в новых версиях это дурацкое ограничение на кол-во страниц в таблице. Реально иногда бесит, и нормального инструмента в базе для мониторинга такой ситуации нету. Действия в этом направлении сделаны. Есть понятие дефрагментации, сам не пользовался - работаю по старинке. Проблемы как таковой-то нет. Мониторится количество екстентов, рост данных и алтерится размер следующего екстента. Как ни крути, а нужно ослеживать размер, количество строк, количество екстентов. 1 раз написать запрос и периодисески им пользоваться. Запрос вроде еще у тулзневене Васи был. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2013, 22:50 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
AndronВообще уже девелоперам из IBM пора бы исправить в новых версиях это дурацкое ограничение на кол-во страниц в таблице. Реально иногда бесит, и нормального инструмента в базе для мониторинга такой ситуации нету. не в таблице, а в фрагменте, будем всё же точнее описывать ситуацию. (может конечно в каких-то очень старых версиях нет фрагментов...) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2013, 23:34 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
Andron, автофрагментирование? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2013, 00:48 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
Была схожая ситуация таблица 400 млн записей. Экстенты автоматически будут добавляться по условию и по умолчанию (есно если место есть куда шагать). у меня была проблема ROWID за 16+ млн. Из трех известных способов выбрал - с 2к перевел на 4к. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 21:38 |
|
No more extent в огроменной таблице
|
|||
---|---|---|---|
#18+
интересно, а алтернуть фрагмент с выключенной журнализацией пробовали? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:32 |
|
|
start [/forum/topic.php?fid=44&tid=1606978]: |
0ms |
get settings: |
17ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
26ms |
get topic data: |
2ms |
get forum data: |
1ms |
get page messages: |
469ms |
get tp. blocked users: |
1ms |
others: | 271ms |
total: | 794ms |
0 / 0 |