Показать полную графическую версию : Как уменьшить базу данных?
Avatar-Lion
07-02-2018, 17:25
Имеется файл dd_Current_Data.MDF объёмом в ~500Мбайт, который создавался силами программы "Доктор Ден", которая по сути своей является банальной картотекой для стоматологической клиники (ФИО пациента, его контакты, проведенные работы и т.д.). Где-то последние полгода программа стала долго запускаться - exe'шник программы грузит процессор минут по 10, а также лопает RAM. Я так подозреваю, все дело в излишне большой базе данных. Погуглил. Пишут про команду DBCC SHRINKFILE, но непонятно где ее надо вводить. В трее висит значок SQL-сервера, его можно остановить \ запустить заново, но не более того. Возможно, надо что-то доустановить? Но что именно? До этого никогда дела с базами данных не имел, поэтому без понятия как оно все должно выглядеть.
Краткий конфиг компа: Celeron G540, 2Gb DDR3, SSD 60Gb.
Avatar-Lion,
Если действительно есть значек управления службой: тогда с вероятностью 99% SQL 2000.
А дальше по обстоятельствам - базовая утилита управления "SQL Server Enterprise Manager", но если использован MSDE то этой утилиты нет в комплекте. Отдельно она не поставляется.
Мало того, помимо шринка надо еще проверить модель восстановления - если она "Полная" то шринк не поможет - вначале надо выставить модель восстановления простая и только потом шринкать...
Avatar-Lion
08-02-2018, 09:58
y--, Хм... Да, точно, в списке установленного ПО числится нечто с названием ...Desktop Engine (полностью не помню, а ПК этого под рукой нет). Видимо, это и есть MSDE. И что делать? Искать этот таинственный SQL Server Enterprise Manager на торрентах?
Avatar-Lion,
SQL Server Enterprise Manager не поставляется в качестве отдельного продукта...
Поэтому официальный путь - скачать любой дистриб полного MSSQL 2000 и ставить его без установки самого сервера - только Client Tools(ну и может еще что-то по зависимости)
Без установки чего-либо(как впрочем и без гарантии - на свой страх и риск)
Собрать в одну папку файлы:
ISQLW.exe
isqlw.rll
objmgr.dll
objmgr.rll
PFCLNT80.dll
PFCLNT80.RLL
pfutil80.dll
pfutil80.rll
semsfc.dll
semsfc.rll
sqlgui.dll
sqlgui.rll
sqlqry.dll
sqlqry.rll
sqlresld.dll
sqlsvc.DLL
sqlsvc.RLL
W95SCM.dll
из скачанного дистрибутива полного MSSQL 2000
Запускать ISQLW.exe - подключаться к нужному экземпляру СУБД и выполнять необходимые запросы...
Вывести текущее значение модели восстановления:
SP_HELPDB <имя базы>
если она не SIMPLE
тогда
ALTER DATABASE <имя базы> SET RECOVERY SIMPLE
Avatar-Lion, можно взять более современную консоль управления (https://docs.microsoft.com/ru-ru/sql/ssms/download-sql-server-management-studio-ssms) и подключиться к старому серверу. Впрочем, команду можно послать через любой (поддерживающий MS SQL) клиент (например HeidiSQL (https://www.heidisql.com/)) или библиотеку/драйвер языка программирования.
y--, модель восстановления влияет на размер файла логов, а не файла данных, так что одно другому не мешает.
SQL Agent есть и в более поздних версиях и выглядит как иконка в трее
Avatar-Lion
08-02-2018, 14:39
Подключиться к серверу я не могу, т.к. там комп рабочий и эксперименты ставить, мягко говоря, не очень удобно. Скопировал пока что базу на флэшку к себе.
Скачал SQL Server 2000 Standard Edition. На Windows 7 (64-bit) ставиться не желает: http://www.picshare.ru/uploads/180208/5eajlV541K.png
На Windows XP говорит следующее: http://www.picshare.ru/uploads/180208/99w7qe3yQ4.png
Что ж ему надо-то? Ведь я так полагаю, прежде чем мутить что-то с базой, необходимо установить сервер, подключить к нему базу данных, а потом уже делать с ней что-либо. Или я не в том направлении копаю?
Busla,
модель восстановления влияет на размер файла логов, а не файла данных, так что одно другому не мешает. »размер БД=размер файлов сегментов базы+ размер файлов сегментов лога
Если у тебя модель FULL то всегда львиная доля размера БД будет сидеть в логе...
И сколько БД не шринкай ее объем (существенно) не изменится...
А усечение лога это уже несколько другая операция чем шринк.
Avatar-Lion, На Windows XP говорит следующее: »ищи developer - она и на XP встанет...
Avatar-Lion
08-02-2018, 16:18
y--, Уф... Вроде нашел и поставил. Базу в список добавил. А где команды (SP_HELPDB...) теперь вводить? Если правой кнопкой ткнуть, то можно сделать так (http://www.picshare.ru/uploads/180208/e74zU0CvEN.png) и потом так (http://www.picshare.ru/uploads/180208/9JVYcxM738.png). Но почему всего 3Мб предлагает освободить? Я думал, он ее сожмет до исходного значения в 10-20Мбайт, там же только текст и всё, никаких рисунков и прочего в базе нет.
Avatar-Lion,
в свойствах посмотри модель восстановления - она скорей всего полная и основной объем сидит в логе. Там же ее можно сменить...
Avatar-Lion
08-02-2018, 16:39
y--, Так... Выставил Simple вместо Full: http://www.picshare.ru/uploads/180208/gB44W656M5.png - что дальше?
---
Я нашел пункт назначения заданий. В частности, переиндексация. Но они все откладываются во времени. Как их выполнить "здесь и сейчас"?
И где все-таки вводить команды? Все облазил - ничего не нашел. В стандартной командной строке ничего не получается: http://www.picshare.ru/uploads/180208/19mW9B60DK.png
Исходите из того что расширение MDF это образ а не файл!!! Это как ICO образ.
y--, не надо мне объяснять то, что я, очевидно и так, знаю. В исходном сообщении речь была конкретно про большой файл dd_Current_Data.MDF
Я нашел пункт назначения заданий. В частности, переиндексация. Но они все откладываются во времени. Как их выполнить "здесь и сейчас"? »
Для большинства заданий нет аналогичных кнопок/менюшек. Предполагается, что вся полнота операций доступна через команды. А типовые задания - лишь незначительное подмножество возможных операций.
И где все-таки вводить команды? »
В отдельной утилите QueryAnalyser
Исходите из того что расширение MDF это образ а не файл »
Странная аналогия - что вы хотели этим сказать?
Avatar-Lion
08-02-2018, 18:30
Busla, А, вот оно что. Тьфу ты... Понятно теперь. И какие команды можете порекомендовать для уменьшения размера базы данных и повышения быстродействия на указанной конфигурации?
Меня просто смущает как текст (!!!) может занимать аж 500 мегабайт. Это ж вся библиотека мира туда поместится, наверное...
что вы хотели этим сказать? »
Как вы собираетесь программно видеть сотню половинок разбитого образа из программы "Доктор Ден"?
Avatar-Lion
08-02-2018, 18:35
Нашел в инете команду переиндексации, но не работает почему-то: http://www.picshare.ru/uploads/180208/zyf1FP72P7.png
аж 500 мегабайт. Это ж вся библиотека мира туда поместится »
Вот и я о том же это как PDF RADER который загрузил 500Мбайт книгу!!!! И сколько он грузить ее будет. И вы ее начали листать и сколько листать и грузится. Можно разрезать книгу НО Как PDF RADER будет видить 100 частей разрезанной книги, опять же под одним и тем же именем одновременно и по частям.
Проблема в том что "Доктор Ден" видит только один файл и только. И будет грузить его в память.
Avatar-Lion
08-02-2018, 18:48
ziku, Да какая разница-то? Скорость линейного чтения у SSD обычно в рамках 400-500Мбайт\с, т.е. запас по скорости чтения заведомо имеется, он эту базу должен целиком в оперативку пихать за две-три секунды. А вместо этого думает, думает, думает... Причем у него доходит до какого-то определенного лимита в 200-300Мбайт RAM, а потом прибавление занятого объема идет по чуть-чуть, по 10-20Кбайт, если судить по Диспетчеру задач. Словно он натыкается на какой-то огромный пустой кусок в базе и долго-долго проматывает его, прежде чем снова данные начинаются. Ну, я так вижу ситуацию. Не знаю как оно на самом деле. Если бы я знал как понять почему программа долго грузит базу, я бы на форуме не спрашивал.
что дальше? »теперь шринк 2 раза подряд через интерфейс.В отдельной утилите QueryAnalyser »вполне себе ничего вызывается через SQL Server Enterprise Manager (Generate SQL Script)
Нашел в инете команду переиндексации »тогда уж не переиндексацию надо делать, а
USE <имя нужной БД>
-- Declare variables
SET NOCOUNT ON
DECLARE @tablename VARCHAR (128)
DECLARE @execstr VARCHAR (255)
DECLARE @objectid INT
DECLARE @indexid INT
DECLARE @frag DECIMAL
DECLARE @maxfrag DECIMAL
-- Decide on the maximum fragmentation to allow
SELECT @maxfrag = 30.0
-- Declare cursor
DECLARE tables CURSOR FOR
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
-- Create the table
CREATE TABLE #fraglist (
ObjectName CHAR (255),
ObjectId INT,
IndexName CHAR (255),
IndexId INT,
Lvl INT,
CountPages INT,
CountRows INT,
MinRecSize INT,
MaxRecSize INT,
AvgRecSize INT,
ForRecCount INT,
Extents INT,
ExtentSwitches INT,
AvgFreeBytes INT,
AvgPageDensity INT,
ScanDensity DECIMAL,
BestCount INT,
ActualCount INT,
LogicalFrag DECIMAL,
ExtentFrag DECIMAL)
-- Open the cursor
OPEN tables
-- Loop through all the tables in the database
FETCH NEXT
FROM tables
INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
-- Do the showcontig of all indexes of the table
INSERT INTO #fraglist
EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''')
WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS')
FETCH NEXT
FROM tables
INTO @tablename
END
-- Close and deallocate the cursor
CLOSE tables
DEALLOCATE tables
-- Declare cursor for list of indexes to be defragged
DECLARE indexes CURSOR FOR
SELECT ObjectName, ObjectId, IndexId, LogicalFrag
FROM #fraglist
WHERE LogicalFrag >= @maxfrag
AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0
-- Open the cursor
OPEN indexes
-- loop through the indexes
FETCH NEXT
FROM indexes
INTO @tablename, @objectid, @indexid, @frag
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Executing DBCC INDEXDEFRAG (0, ' + RTRIM(@tablename) + ',
' + RTRIM(@indexid) + ') - fragmentation currently '
+ RTRIM(CONVERT(varchar(15),@frag)) + '%'
SELECT @execstr = 'DBCC INDEXDEFRAG (0, ' + RTRIM(@objectid) + ',
' + RTRIM(@indexid) + ')'
EXEC (@execstr)
FETCH NEXT
FROM indexes
INTO @tablename, @objectid, @indexid, @frag
END
-- Close and deallocate the cursor
CLOSE indexes
DEALLOCATE indexes
-- Delete the temporary table
DROP TABLE #fraglist
GO
MDF файл это архивный сжатый файл. Сама программа сидит в ОЗУ, работает, да + 500Мбайт в архиве Нужно разархивировать и вывести на экран, а память видеокарты - пшик, да скорость шины, дай угадаю 800Мгц. Да и программа изначально построена неправильно, она открывает весь архив а не постранично, и тут ничего не сделаешь. И наступит момент невозврата когда файл dd_Current_Data.MDF окажется больше той части памяти которую отвел компьютер под программу, машина зависнет.
Я почему начал с вопросов, а не пояснений, и смотри как бросились все но поняв и никого не осталось тут.
На движке "Доктор Ден" ничего не сделаешь.
Алгоритм работы "Доктор Ден" не позволит вам что ли бо изменить, менять нужно программу, а базу данных создавать новую из старой базы.
Похожая программа мне встречалась Dental Clinic Manager, почитай о ней может ваша фирма перейдет не неё. Встречалась потому что что моя дочь имеет свои клиники.
С'est la vie как говорят латинасы в Риа Де Жетомере.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.