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

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

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


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

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


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

Если бы ты знал, как организуется хранение данных в БД ASE, то это было бы понятно (если знаешь- ну извини, значит я не прав ) Страницы данных - основное понятие при хранении данных в ASE- нумеруются сквозняком по всем девайсам, выстроенным в порядке следования VDEVNO. Идут девайсы друг за другом, внутри девайса N страниц, от адреса K до K + N -1. Далее страницы следующего девайса и т.д. Номера страниц входят в номера записей, которые записаны в индексах и еще кое-где. Номера страниц также записаны в sysindexes как начала цепочек и в Object Allocation Map и в страницах распределения (первые страницы на каждом экстенте) и ... ну ты уже наверное понял, что очень много где. Короче, я даже не прав был в другом посте в топике, тут не одну БД надо перешерстить - а ровно ВСЕ на сервере, ну разве что только master и другие системные БД можно не трогать.
Все страницы перенумеровать, все связи переписать. Оччень сложно все это.
...
Рейтинг: 0 / 0
06.10.2004, 10:09
    #32725225
Можно ли уменьшить размер БД?
Всем спасибо за ответы, теперь боле-менее понятно.
Действительно, я рассматривал ситуацию с позиции MS SQL, с которым знаком лучше, чем с Sybase.
Попробуем перенести данные в новую БД.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
14.10.2005, 00:35
    #33323924
griniland
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли уменьшить размер БД?
А я вот тут подумал
...
Рейтинг: 0 / 0
14.10.2005, 00:44
    #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
14.10.2005, 00:57
    #33323935
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли уменьшить размер БД?
...
Рейтинг: 0 / 0
14.10.2005, 13:11
    #33324935
sybdba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли уменьшить размер БД?
Чайник в SybaseВариант с созданием новой БД и выгрузкой данных через bcp очень трудоемок, таблиц около 500, есть memo поля, timestamp и прочая фигня.
Это разве такая редкая ситуация, что нужно уменьшить размер сегмента? И Sybase не чешется никак? Пора на Ораклу наверно переходить...

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

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

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

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

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

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

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

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

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

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

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

2MasterZiv: не так сложно как кажется, правда приходилось делатьэто всего один раз ;) и не помню - на пустой БД (лишний девайс указан в середине скрипта генерения большой БД) или полной...
...
Рейтинг: 0 / 0
15.10.2005, 17:35
    #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
15.10.2005, 17:43
    #33326555
sybdba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли уменьшить размер БД?
griniland
когда segmap в sysusages =0 - что это значит?

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

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

+ буржуи советуют держать распечатку sysusages, sysdevices, sysdatabase и т.п. на бумаге - но это на любителя ;)
...
Рейтинг: 0 / 0
16.10.2005, 00:26
    #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
17.10.2005, 10:36
    #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
17.10.2005, 20:25
    #33329113
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли уменьшить размер БД?
grinilandsp_dropsegment @segname, @dbname, @devname-- разьве приводит к ФИЗИЧЕСКОМУ освобождению девайса?
Как уже написали, не приводит. Это признаки, определяющие расположение будущих данных. Если бы приводило, время работы этой команды было бы сравнимо со временем работы reorg rebuild для таблиц с девайса.

Соответственно, reorg rebuild без указания индекса гарантировано перенесет все данные на используемый девайс в соответствии с кластерным индексом, если он есть, если с удаляемого уже снята пометка использования через sp_dropsegment.
...
Рейтинг: 0 / 0
25.10.2005, 13:48
    #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
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Можно ли уменьшить размер БД? / 25 сообщений из 39, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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