Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - Как уменьшить базу данных?

Ответить
Настройки темы
MSFT SQL Server - Как уменьшить базу данных?

Аватара для Avatar-Lion

Support L1+


Contributor


Сообщения: 5028
Благодарности: 990


Конфигурация

Профиль | Отправить PM | Цитировать


Имеется файл dd_Current_Data.MDF объёмом в ~500Мбайт, который создавался силами программы "Доктор Ден", которая по сути своей является банальной картотекой для стоматологической клиники (ФИО пациента, его контакты, проведенные работы и т.д.). Где-то последние полгода программа стала долго запускаться - exe'шник программы грузит процессор минут по 10, а также лопает RAM. Я так подозреваю, все дело в излишне большой базе данных. Погуглил. Пишут про команду DBCC SHRINKFILE, но непонятно где ее надо вводить. В трее висит значок SQL-сервера, его можно остановить \ запустить заново, но не более того. Возможно, надо что-то доустановить? Но что именно? До этого никогда дела с базами данных не имел, поэтому без понятия как оно все должно выглядеть.

Краткий конфиг компа: Celeron G540, 2Gb DDR3, SSD 60Gb.

Отправлено: 17:25, 07-02-2018

 

Аватара для Avatar-Lion

Support L1+


Contributor


Сообщения: 5028
Благодарности: 990

Профиль | Отправить PM | Цитировать


y--, Так... Выставил Simple вместо Full: http://www.picshare.ru/uploads/180208/gB44W656M5.png - что дальше?

---
Я нашел пункт назначения заданий. В частности, переиндексация. Но они все откладываются во времени. Как их выполнить "здесь и сейчас"?

И где все-таки вводить команды? Все облазил - ничего не нашел. В стандартной командной строке ничего не получается: http://www.picshare.ru/uploads/180208/19mW9B60DK.png

Последний раз редактировалось Avatar-Lion, 08-02-2018 в 17:42.


Отправлено: 16:39, 08-02-2018 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ziku

Старожил


Сообщения: 440
Благодарности: 39

Профиль | Отправить PM | Цитировать


Исходите из того что расширение MDF это образ а не файл!!! Это как ICO образ.

-------
Опыт - это учитель, который очень дорого берет за свои уроки.Лучше один раз взяться за ум, чем потом всю жизнь хвататься за голову.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:00, 08-02-2018 | #12


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


y--, не надо мне объяснять то, что я, очевидно и так, знаю. В исходном сообщении речь была конкретно про большой файл dd_Current_Data.MDF

Цитата Avatar-Lion:
Я нашел пункт назначения заданий. В частности, переиндексация. Но они все откладываются во времени. Как их выполнить "здесь и сейчас"? »
Для большинства заданий нет аналогичных кнопок/менюшек. Предполагается, что вся полнота операций доступна через команды. А типовые задания - лишь незначительное подмножество возможных операций.

Цитата Avatar-Lion:
И где все-таки вводить команды? »
В отдельной утилите QueryAnalyser

Цитата ziku:
Исходите из того что расширение MDF это образ а не файл »
Странная аналогия - что вы хотели этим сказать?
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:20, 08-02-2018 | #13


Аватара для Avatar-Lion

Support L1+


Contributor


Сообщения: 5028
Благодарности: 990

Профиль | Отправить PM | Цитировать


Busla, А, вот оно что. Тьфу ты... Понятно теперь. И какие команды можете порекомендовать для уменьшения размера базы данных и повышения быстродействия на указанной конфигурации?

Меня просто смущает как текст (!!!) может занимать аж 500 мегабайт. Это ж вся библиотека мира туда поместится, наверное...

Отправлено: 18:30, 08-02-2018 | #14


Аватара для ziku

Старожил


Сообщения: 440
Благодарности: 39

Профиль | Отправить PM | Цитировать


Цитата Busla:
что вы хотели этим сказать? »
Как вы собираетесь программно видеть сотню половинок разбитого образа из программы "Доктор Ден"?

-------
Опыт - это учитель, который очень дорого берет за свои уроки.Лучше один раз взяться за ум, чем потом всю жизнь хвататься за голову.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:30, 08-02-2018 | #15


Аватара для Avatar-Lion

Support L1+


Contributor


Сообщения: 5028
Благодарности: 990

Профиль | Отправить PM | Цитировать


Нашел в инете команду переиндексации, но не работает почему-то: http://www.picshare.ru/uploads/180208/zyf1FP72P7.png

Отправлено: 18:35, 08-02-2018 | #16


Аватара для ziku

Старожил


Сообщения: 440
Благодарности: 39

Профиль | Отправить PM | Цитировать


Цитата Avatar-Lion:
аж 500 мегабайт. Это ж вся библиотека мира туда поместится »
Вот и я о том же это как PDF RADER который загрузил 500Мбайт книгу!!!! И сколько он грузить ее будет. И вы ее начали листать и сколько листать и грузится. Можно разрезать книгу НО Как PDF RADER будет видить 100 частей разрезанной книги, опять же под одним и тем же именем одновременно и по частям.
Проблема в том что "Доктор Ден" видит только один файл и только. И будет грузить его в память.

-------
Опыт - это учитель, который очень дорого берет за свои уроки.Лучше один раз взяться за ум, чем потом всю жизнь хвататься за голову.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:35, 08-02-2018 | #17


Аватара для Avatar-Lion

Support L1+


Contributor


Сообщения: 5028
Благодарности: 990

Профиль | Отправить PM | Цитировать


ziku, Да какая разница-то? Скорость линейного чтения у SSD обычно в рамках 400-500Мбайт\с, т.е. запас по скорости чтения заведомо имеется, он эту базу должен целиком в оперативку пихать за две-три секунды. А вместо этого думает, думает, думает... Причем у него доходит до какого-то определенного лимита в 200-300Мбайт RAM, а потом прибавление занятого объема идет по чуть-чуть, по 10-20Кбайт, если судить по Диспетчеру задач. Словно он натыкается на какой-то огромный пустой кусок в базе и долго-долго проматывает его, прежде чем снова данные начинаются. Ну, я так вижу ситуацию. Не знаю как оно на самом деле. Если бы я знал как понять почему программа долго грузит базу, я бы на форуме не спрашивал.

Отправлено: 18:48, 08-02-2018 | #18

y-- y-- вне форума

Старожил


Сообщения: 231
Благодарности: 62

Профиль | Отправить PM | Цитировать


Цитата Avatar-Lion:
что дальше? »
теперь шринк 2 раза подряд через интерфейс.
Цитата Busla:
В отдельной утилите QueryAnalyser »
вполне себе ничего вызывается через SQL Server Enterprise Manager (Generate SQL Script)
Цитата Avatar-Lion:
Нашел в инете команду переиндексации »
тогда уж не переиндексацию надо делать, а
дефрагментацию индексов

Код: Выделить весь код
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

-------
Ты это - заходи если что...

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:14, 08-02-2018 | #19


Аватара для ziku

Старожил


Сообщения: 440
Благодарности: 39

Профиль | Отправить PM | Цитировать


MDF файл это архивный сжатый файл. Сама программа сидит в ОЗУ, работает, да + 500Мбайт в архиве Нужно разархивировать и вывести на экран, а память видеокарты - пшик, да скорость шины, дай угадаю 800Мгц. Да и программа изначально построена неправильно, она открывает весь архив а не постранично, и тут ничего не сделаешь. И наступит момент невозврата когда файл dd_Current_Data.MDF окажется больше той части памяти которую отвел компьютер под программу, машина зависнет.
Я почему начал с вопросов, а не пояснений, и смотри как бросились все но поняв и никого не осталось тут.
На движке "Доктор Ден" ничего не сделаешь.
Алгоритм работы "Доктор Ден" не позволит вам что ли бо изменить, менять нужно программу, а базу данных создавать новую из старой базы.
Похожая программа мне встречалась Dental Clinic Manager, почитай о ней может ваша фирма перейдет не неё. Встречалась потому что что моя дочь имеет свои клиники.
С'est la vie как говорят латинасы в Риа Де Жетомере.

-------
Опыт - это учитель, который очень дорого берет за свои уроки.Лучше один раз взяться за ум, чем потом всю жизнь хвататься за голову.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:27, 08-02-2018 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - Как уменьшить базу данных?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
.NET - Как изменить базу данных Access при изменении данных в таблице на форме tumanovalex Программирование и базы данных 2 15-04-2016 16:40
MSFT SQL Server - Как создать базу данных SQL Server Compact? Alsou93 Программирование и базы данных 0 23-12-2013 22:32
Разное - Как правильно построить базу данных? Aleksandr84 Microsoft Office (Word, Excel, Outlook и т.д.) 3 08-07-2013 18:43
C/C++ - Как записать DBGrid в базу данных MS Acess? S1stem Программирование и базы данных 1 25-01-2008 13:10
Как защитить базу данных на серваке? BatutMAN Защита компьютерных систем 15 17-01-2003 13:11




 
Переход