powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Можно ли уменьшить размер БД?
25 сообщений из 39, страница 1 из 2
Можно ли уменьшить размер БД?
    #32724042
ASE 12.5
Ранее существовала одна база данных, содержащая множество небольших таблиц (до 10000 записей) и две таблицы с более чем 100 млн. записей. Для удобства бэкапирования эти две большие таблицы были перенесены в отдельную БД, а аналогичные таблицы в старой БД удалены.
Можно ли "сжать" старую БД, т.е. уменьшить размер выделенного под нее ранее пространства и как?
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #32724200
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До недавнего времени такой возможности вообще не было (кроме выгрузки данных с помощью BCP, создания новой БД меньшего размера и загрузки данных туда). В последних версиях 12.5 (это либо .1, либо .2 ) вроде бы что-то такое сделали, чтобы это было возможно, или я путаю.
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #32724227
Вариант с созданием новой БД и выгрузкой данных через bcp очень трудоемок, таблиц около 500, есть memo поля, timestamp и прочая фигня.
Это разве такая редкая ситуация, что нужно уменьшить размер сегмента? И Sybase не чешется никак? Пора на Ораклу наверно переходить...
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #32724332
Фотография Рыжий Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это разве такая редкая ситуация, что нужно уменьшить размер сегмента? И Sybase не чешется никак? Пора на Ораклу наверно переходить...

Оффтоп, это так просто, раз и на Оракл, раз и на MSSQL?
И еще оффтоп: это все очень напоминает такую вещь: раз у ОС нет нормального дефрагментатора, значит надо ставить другую?

...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #32724464
По поводу Оракла это эмоции - такой вариант действительно рассматривается, но конечно по другим причинам. Я понять хочу ситуацию. почему однажды выделив место под базу (перезаложились или админ чего попутал случайно), нельзя это место высвободить? А то имеем сейчас следующее - 80 Гигов болтаются в воздухе, но места свободного на сервере нет, требуется покупка новых дисков..
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #32724534
Компостеров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воспользуйся утилитой миграции, в 12.5 она появилась или посторонними продуктами: Embarcadero ChangeManager или MS DTS
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #32724916
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чайник в SybaseВариант с созданием новой БД и выгрузкой данных через bcp очень трудоемок, таблиц около 500, есть memo поля, timestamp и прочая фигня.


Да нет, на самом деле, не так это и сложно. Делается все на полном автомате с использованием (например) dbschema.pl.

Чайник в Sybase
Это разве такая редкая ситуация, что нужно уменьшить размер сегмента? И Sybase не чешется никак?


Ну, как-то так повелось издавна... MS вот сделал, а Sybase как-то не удосужился. На самом деле, это довольно трудная и долгая операция .
Для того, чтобы уменьшить БД, надо понять, какие страницы не заняты, если есть незанятые страницы не в конце девайса - их надо наверное как-то перенести в конец, в общем - грубо говоря, перетряхнуть всю базу.
MS кстати для того, чтобы реализовать это, пришлось полностью пересмотреть архитектуру хранения данных (они ушли от понятия device).
И , поверь мне - не самая это важная функция в СУБД. Хотя и удобная иногда.
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #32724925
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чайник в SybaseЯ понять хочу ситуацию. почему однажды выделив место под базу (перезаложились или админ чего попутал случайно), нельзя это место высвободить?

Если бы ты знал, как организуется хранение данных в БД ASE, то это было бы понятно (если знаешь- ну извини, значит я не прав ) Страницы данных - основное понятие при хранении данных в ASE- нумеруются сквозняком по всем девайсам, выстроенным в порядке следования VDEVNO. Идут девайсы друг за другом, внутри девайса N страниц, от адреса K до K + N -1. Далее страницы следующего девайса и т.д. Номера страниц входят в номера записей, которые записаны в индексах и еще кое-где. Номера страниц также записаны в sysindexes как начала цепочек и в Object Allocation Map и в страницах распределения (первые страницы на каждом экстенте) и ... ну ты уже наверное понял, что очень много где. Короче, я даже не прав был в другом посте в топике, тут не одну БД надо перешерстить - а ровно ВСЕ на сервере, ну разве что только master и другие системные БД можно не трогать.
Все страницы перенумеровать, все связи переписать. Оччень сложно все это.
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #32725225
Всем спасибо за ответы, теперь боле-менее понятно.
Действительно, я рассматривал ситуацию с позиции MS SQL, с которым знаком лучше, чем с Sybase.
Попробуем перенести данные в новую БД.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Можно ли уменьшить размер БД?
    #33323924
griniland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А я вот тут подумал
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33323929
griniland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так, сорри. ASE 11.9.2.6. (версия)
Собственно, мысль:
Допустим, есть некая "раздутая" БД (как у меня), в которой полно freepages,
лежащая на 2-ух девайсах- 30 и 20 ГБ каждый (ullocated ёмкость). Притом, 20 Гб девайс на половину пуст (или полон, это уже в зависимости от уровня оптимизма;).
Что если я сдамплю эту базу и разресторю её в такую же по размеру, но, скажем, на 12 девайсах?
dev0-30 GB
dev1-2 Gb
dev3-2 GB
dev4-2 GB
dev5-2 GB
dev6-2 GB
dev7-2 Gb
dev8-2 GB
dev9-2GB
dev10-2 GB
dev11-2 GB
По идее, должно получиться, что некоторые девайсы (если смотреть в sysusages)
будут ПОЛНОСТЬЮ не задействованы (т.е. не содержать заполненных страниц).

Вопрос к знатокам: что мне может помешать грохнуть такие девайсы
в sysusages и sysdevices?
и ещё подвопрос:
когда segmap в sysusages =0 - что это значит?
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33323935
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33324935
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чайник в SybaseВариант с созданием новой БД и выгрузкой данных через bcp очень трудоемок, таблиц около 500, есть memo поля, timestamp и прочая фигня.
Это разве такая редкая ситуация, что нужно уменьшить размер сегмента? И Sybase не чешется никак? Пора на Ораклу наверно переходить...

И в чем проблема ? хоть 500 000 таблиц...
пишем курсор для генерирования команд bcp out & bcp in для каждой таблицы
результат выполнения курсора разделяем на два батника - первый выливает данные в _бинарном_ (native) формате, другой - заливает

вопрос только во времени работы на конкретной БД (ну и в свободном дисковом пространстве), больше ни в чём проблемы не вижу
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33324954
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grinilandтак, сорри. ASE 11.9.2.6. (версия)
Вопрос к знатокам: что мне может помешать грохнуть такие девайсы
в sysusages и sysdevices?

незнание пароля SA ;)
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33325590
griniland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sa- я сам Sa=)
А если серьёзно?
Кстати, спасибо за линк на англоязычную страничку- я думал почти в правильном направлении.
Вот только не догнал, зачем segmap ставить в 0, если мы тут же удалим эту запись (т.е. догнал конечно, что без 0 она может в тот же момент принять данные)
Ну и как перемещать таблицы-тоже не совсем понял..
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33326194
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sybdba[И в чем проблема ? хоть 500 000 таблиц...
пишем курсор для генерирования команд bcp out & bcp

Да не надо курсоров. DBSchema.pl все отлично делает.
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33326539
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv sybdba[И в чем проблема ? хоть 500 000 таблиц...
пишем курсор для генерирования команд bcp out & bcp

Да не надо курсоров. DBSchema.pl все отлично делает.
:) .pl - подразумевает наличие perl-обработчика (либо под винды, либо юниксовый)...

а BCP -универсальна :)
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33326542
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grinilandSa- я сам Sa=)
А если серьёзно?
Кстати, спасибо за линк на англоязычную страничку- я думал почти в правильном направлении.
Вот только не догнал, зачем segmap ставить в 0, если мы тут же удалим эту запись (т.е. догнал конечно, что без 0 она может в тот же момент принять данные)
Ну и как перемещать таблицы-тоже не совсем понял..

в смысле ? "перемещать таблицы" ?

если имеется ввиду переливка данных между таблицами, то всё просто :
1) генерим скрипт таблицы
2) выливаем из нее данные (bcp); если будем переносить данные в пределах одной платформы (операционки), то используем native формат, иначе - текстовый
3) убиваем таблицу - опционально, допустим ее надо перенести на другой девайс
4) создаем таблицу из скрипта
5) заливаем данные
--
вуаля
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33326543
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv Чайник в SybaseЯ понять хочу ситуацию. почему однажды выделив место под базу (перезаложились или админ чего попутал случайно), нельзя это место высвободить?

Если бы ты знал, как организуется хранение данных в БД ASE, то это было бы понятно (если знаешь- ну извини, значит я не прав ) Страницы данных - основное понятие при хранении данных в ASE- нумеруются сквозняком по всем девайсам, выстроенным в порядке следования VDEVNO. Идут девайсы друг за другом, внутри девайса N страниц, от адреса K до K + N -1. Далее страницы следующего девайса и т.д. Номера страниц входят в номера записей, которые записаны в индексах и еще кое-где. Номера страниц также записаны в sysindexes как начала цепочек и в Object Allocation Map и в страницах распределения (первые страницы на каждом экстенте) и ... ну ты уже наверное понял, что очень много где. Короче, я даже не прав был в другом посте в топике, тут не одну БД надо перешерстить - а ровно ВСЕ на сервере, ну разве что только master и другие системные БД можно не трогать.
Все страницы перенумеровать, все связи переписать. Оччень сложно все это.

если девайс был случайно добавлен, то его можно вручную грохнуть ...
если на девайсе уже есть данные, то их надо переложить на другие девайсы и грохнуть запись в master..sysusages об этом девайсе (всё вручную!) этой базы

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

2MasterZiv: не так сложно как кажется, правда приходилось делатьэто всего один раз ;) и не помню - на пустой БД (лишний девайс указан в середине скрипта генерения большой БД) или полной...
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33326548
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grinilandтак, сорри. ASE 11.9.2.6. (версия)
Собственно, мысль:
Допустим, есть некая "раздутая" БД (как у меня), в которой полно freepages,
лежащая на 2-ух девайсах- 30 и 20 ГБ каждый (ullocated ёмкость). Притом, 20 Гб девайс на половину пуст (или полон, это уже в зависимости от уровня оптимизма;).
Что если я сдамплю эту базу и разресторю её в такую же по размеру, но, скажем, на 12 девайсах?
dev0-30 GB
dev1-2 Gb
dev3-2 GB
dev4-2 GB
dev5-2 GB
dev6-2 GB
dev7-2 Gb
dev8-2 GB
dev9-2GB
dev10-2 GB
dev11-2 GB
По идее, должно получиться, что некоторые девайсы (если смотреть в sysusages)
будут ПОЛНОСТЬЮ не задействованы (т.е. не содержать заполненных страниц).

Вопрос к знатокам: что мне может помешать грохнуть такие девайсы
в sysusages и sysdevices?
да ничего не помешает ...
допустим у тебя "освободились" девайсы 10 и 11
тогда сделать следующее:
sp_dropsegment 'default',база,'dev10'
go
sp_dropsegment 'system',база,'dev10'
go
sp_dropsegment 'default',база,'dev11'
go
sp_dropsegment 'system',база,'dev11'
go

в master..sysusages для твоей БД появится значение 0 в segmap
теперь девайсы можно вычищать из sysusages и передергивать сервер

НО !!! ОБЯЗАТЕЛЬНО!!!!
все действия сначала проделать на тестовом сервере, иметь бекап базы (+ проверить что из него база поднимается, и не успокаиваться только на снятии дампа)

если после рестарта сервера тестовая база отрекаверилась, проверки по ней не дали ошибок (допустим dbcc checkdb), то можно приступать и к боевой БД








grinilandи ещё подвопрос:
когда segmap в sysusages =0 - что это значит?
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33326555
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
griniland
когда segmap в sysusages =0 - что это значит?

это значит, что хоть указанный девайс (или фрагмент девайса) и числится за базой, но реально распределение данных на него не идет - ни один сегмент на нём не расположен

Забыл сказать: перед манипуляциями с боевой/тестовой базой и БД master погасить сервер и отложить в сторонку файл master.dat - это _ОБЯЗАТЕЛЬНО_, если не хочется по случайности остаться у разбитого корыта (читай : мёртвый сервер)

+ буржуи советуют держать распечатку sysusages, sysdevices, sysdatabase и т.п. на бумаге - но это на любителя ;)
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33326745
griniland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sybda, огромное спасибо за информацию... Правда, кое-что мне кажется спорным, щаз спрошу;). С удалением девайсов вроде-как разобрался, решил ничего не удалять, 8 лишних гигов- не так много, пущу под transaction log (у меня иногда бывает 2,5 ГБ за 3 часа его генерится, запас не помешает)
Теперь вопросы сложнее...

1. sp_dropsegment @segname, @dbname, @devname-- разьве приводит к ФИЗИЧЕСКОМУ освобождению девайса?
Т.е. данные реально переписываются с него на оставшиеся выделенные под данный сегмент девайсы или просто
делается пометочка в sysusages? (меняется segmap, если на девайсе более никто не размещается- типа 0)-- новые данные более не пишутся на такой девайс, а старые продолжают на нём гнездиться.
Вопрос принципиальный...читал текст процедуры sp_dropsegment--там вроде нет никаких "перемещающих" команд. Куча проверок на валидность, transaction isolation level 0, и перебивка segmap'a в sysusages..может, я чего упустил?

2. Ещё до моего вступления в Sa;) у нас произошло "перемешивание" данных и лога..Судя по всему, часть данных "упала" в сегмент лога- забавно смотреть, как после truncate transaction log with no backup в logsegment'е остаётся
"висеть" 5Гб непоймешь чего (segmap чистая 4, никаких 7!) Это при том, что через Централ видно, что таблица syslogs занимает порядка 100 кб и никаких других объектов не числится (ни таблиц, ни индексов).
С этой ботвой что-нибудь можно поделать? (моё решение- залить дамп с "кривой" разбивкой в тестовую базу данных, размещенную на небольших девайсах (30 гб+ 20 штук по 1 гб), сделать truncate transaction, залезть в syslogs и перебить segmap'ы тем девайсам, выделенным под лог, на которых нет свободного места (т.е. там нифига не лог), в 4-рочки.

3. На закуску: а когда segmap=1- это что? Не нашел в RTFM=)

Заранее спасибо!
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33327408
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
griniland
1. sp_dropsegment @segname, @dbname, @devname-- разьве приводит к ФИЗИЧЕСКОМУ освобождению девайса?
Т.е. данные реально переписываются с него на оставшиеся выделенные под данный сегмент девайсы или просто
делается пометочка в sysusages? (меняется segmap, если на девайсе более никто не размещается- типа 0)-- новые данные более не пишутся на такой девайс, а старые продолжают на нём гнездиться.
Вопрос принципиальный...читал текст процедуры sp_dropsegment--там вроде нет никаких "перемещающих" команд. Куча проверок на валидность, transaction isolation level 0, и перебивка segmap'a в sysusages..может, я чего упустил?

не приводит к физическому освобождению (ФО) :)
таким способом ты говоришь серверу ничего на девайсе не размещать...
ФО делается руками - удаление записей об этом девайсе в master..sysusages
а уж потом из гуёв можно удалить и девайс


griniland
2. Ещё до моего вступления в Sa;) у нас произошло "перемешивание" данных и лога..Судя по всему, часть данных "упала" в сегмент лога- забавно смотреть, как после truncate transaction log with no backup в logsegment'е остаётся
"висеть" 5Гб непоймешь чего (segmap чистая 4, никаких 7!) Это при том, что через Централ видно, что таблица syslogs занимает порядка 100 кб и никаких других объектов не числится (ни таблиц, ни индексов).
С этой ботвой что-нибудь можно поделать? (моё решение- залить дамп с "кривой" разбивкой в тестовую базу данных, размещенную на небольших девайсах (30 гб+ 20 штук по 1 гб), сделать truncate transaction, залезть в syslogs и перебить segmap'ы тем девайсам, выделенным под лог, на которых нет свободного места (т.е. там нифига не лог), в 4-рочки.

"залезть в syslogs" - наверно имелось ввиду sysusages ?
мнээ, я бы просто перелил базу посредством bcp ... заодно и структуру девайсов "причесал" бы :) и данные упорядочил ... хотя у тебя ж все таблицы APL-ные
проблемы могут возникнуть с процедурами, если они внутри оперируют временными таблицами. Поэтому придется сначала генерить эти таблицы, а потом проливать процедуры ...

griniland
3. На закуску: а когда segmap=1- это что? Не нашел в RTFM=)
Заранее спасибо!
segmap = 1 - system
segmap = 2 - default
segmap = 3 - system+default
segmap = 4 - logsegment
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33329113
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grinilandsp_dropsegment @segname, @dbname, @devname-- разьве приводит к ФИЗИЧЕСКОМУ освобождению девайса?
Как уже написали, не приводит. Это признаки, определяющие расположение будущих данных. Если бы приводило, время работы этой команды было бы сравнимо со временем работы reorg rebuild для таблиц с девайса.

Соответственно, reorg rebuild без указания индекса гарантировано перенесет все данные на используемый девайс в соответствии с кластерным индексом, если он есть, если с удаляемого уже снята пометка использования через sp_dropsegment.
...
Рейтинг: 0 / 0
Можно ли уменьшить размер БД?
    #33342514
Maktub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sybdba grinilandтак, сорри. ASE 11.9.2.6. (версия)
Собственно, мысль:
Допустим, есть некая "раздутая" БД (как у меня), в которой полно freepages,
лежащая на 2-ух девайсах- 30 и 20 ГБ каждый (ullocated ёмкость). Притом, 20 Гб девайс на половину пуст (или полон, это уже в зависимости от уровня оптимизма;).
Что если я сдамплю эту базу и разресторю её в такую же по размеру, но, скажем, на 12 девайсах?
dev0-30 GB
dev1-2 Gb
dev3-2 GB
dev4-2 GB
dev5-2 GB
dev6-2 GB
dev7-2 Gb
dev8-2 GB
dev9-2GB
dev10-2 GB
dev11-2 GB
По идее, должно получиться, что некоторые девайсы (если смотреть в sysusages)
будут ПОЛНОСТЬЮ не задействованы (т.е. не содержать заполненных страниц).

Вопрос к знатокам: что мне может помешать грохнуть такие девайсы
в sysusages и sysdevices?
да ничего не помешает ...
допустим у тебя "освободились" девайсы 10 и 11
тогда сделать следующее:
sp_dropsegment 'default',база,'dev10'
go
sp_dropsegment 'system',база,'dev10'
go
sp_dropsegment 'default',база,'dev11'
go
sp_dropsegment 'system',база,'dev11'
go

в master..sysusages для твоей БД появится значение 0 в segmap
теперь девайсы можно вычищать из sysusages и передергивать сервер





sybdba
в master..sysusages для твоей БД появится значение 0 в segmap
теперь девайсы можно вычищать из sysusages и передергивать сервер



Убил строки из master..sysusages со значением 0 в segmap. Причем девайсы 1 и 3 из всех девайсов этой БД.
...
Перезапустил сервер -> теперь БД, для которой убивались девайсы не открывается.

Что я не доделал?
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Можно ли уменьшить размер БД?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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