Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Как уменьшить базу данных? (http://forum.oszone.net/showthread.php?t=333041)

Avatar-Lion 07-02-2018 17:25 2796535

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

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

y-- 08-02-2018 09:15 2796648

Avatar-Lion,
Если действительно есть значек управления службой: тогда с вероятностью 99% SQL 2000.
А дальше по обстоятельствам - базовая утилита управления "SQL Server Enterprise Manager", но если использован MSDE то этой утилиты нет в комплекте. Отдельно она не поставляется.
Мало того, помимо шринка надо еще проверить модель восстановления - если она "Полная" то шринк не поможет - вначале надо выставить модель восстановления простая и только потом шринкать...

Avatar-Lion 08-02-2018 09:58 2796655

y--, Хм... Да, точно, в списке установленного ПО числится нечто с названием ...Desktop Engine (полностью не помню, а ПК этого под рукой нет). Видимо, это и есть MSDE. И что делать? Искать этот таинственный SQL Server Enterprise Manager на торрентах?

y-- 08-02-2018 11:31 2796677

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 - подключаться к нужному экземпляру СУБД и выполнять необходимые запросы...

y-- 08-02-2018 12:01 2796684

Модель восстановления SQL
Вывести текущее значение модели восстановления:
SP_HELPDB <имя базы>
если она не SIMPLE
тогда
ALTER DATABASE <имя базы> SET RECOVERY SIMPLE

Busla 08-02-2018 13:27 2796708

Avatar-Lion, можно взять более современную консоль управления и подключиться к старому серверу. Впрочем, команду можно послать через любой (поддерживающий MS SQL) клиент (например HeidiSQL) или библиотеку/драйвер языка программирования.

y--, модель восстановления влияет на размер файла логов, а не файла данных, так что одно другому не мешает.
SQL Agent есть и в более поздних версиях и выглядит как иконка в трее

Avatar-Lion 08-02-2018 14:39 2796729

Подключиться к серверу я не могу, т.к. там комп рабочий и эксперименты ставить, мягко говоря, не очень удобно. Скопировал пока что базу на флэшку к себе.

Скачал 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

Что ж ему надо-то? Ведь я так полагаю, прежде чем мутить что-то с базой, необходимо установить сервер, подключить к нему базу данных, а потом уже делать с ней что-либо. Или я не в том направлении копаю?

y-- 08-02-2018 15:36 2796754

Busla,
Цитата:

Цитата Busla
модель восстановления влияет на размер файла логов, а не файла данных, так что одно другому не мешает. »

размер БД=размер файлов сегментов базы+ размер файлов сегментов лога
Если у тебя модель FULL то всегда львиная доля размера БД будет сидеть в логе...
И сколько БД не шринкай ее объем (существенно) не изменится...
А усечение лога это уже несколько другая операция чем шринк.

Avatar-Lion,
Цитата:

Цитата Avatar-Lion
На Windows XP говорит следующее: »

ищи developer - она и на XP встанет...

Avatar-Lion 08-02-2018 16:18 2796770

y--, Уф... Вроде нашел и поставил. Базу в список добавил. А где команды (SP_HELPDB...) теперь вводить? Если правой кнопкой ткнуть, то можно сделать так и потом так. Но почему всего 3Мб предлагает освободить? Я думал, он ее сожмет до исходного значения в 10-20Мбайт, там же только текст и всё, никаких рисунков и прочего в базе нет.

y-- 08-02-2018 16:29 2796773

Avatar-Lion,
в свойствах посмотри модель восстановления - она скорей всего полная и основной объем сидит в логе. Там же ее можно сменить...

Avatar-Lion 08-02-2018 16:39 2796778

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

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

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

ziku 08-02-2018 18:00 2796794

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

Busla 08-02-2018 18:20 2796796

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

Цитата:

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

Для большинства заданий нет аналогичных кнопок/менюшек. Предполагается, что вся полнота операций доступна через команды. А типовые задания - лишь незначительное подмножество возможных операций.

Цитата:

Цитата Avatar-Lion
И где все-таки вводить команды? »

В отдельной утилите QueryAnalyser

Цитата:

Цитата ziku
Исходите из того что расширение MDF это образ а не файл »

Странная аналогия - что вы хотели этим сказать?

Avatar-Lion 08-02-2018 18:30 2796799

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

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

ziku 08-02-2018 18:30 2796800

Цитата:

Цитата Busla
что вы хотели этим сказать? »

Как вы собираетесь программно видеть сотню половинок разбитого образа из программы "Доктор Ден"?

Avatar-Lion 08-02-2018 18:35 2796801

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

ziku 08-02-2018 18:35 2796803

Цитата:

Цитата Avatar-Lion
аж 500 мегабайт. Это ж вся библиотека мира туда поместится »

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

Avatar-Lion 08-02-2018 18:48 2796807

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

y-- 08-02-2018 20:14 2796824

Цитата:

Цитата 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


ziku 08-02-2018 20:27 2796826

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

Avatar-Lion 08-02-2018 20:30 2796828

Цитата:

Цитата y--
шринк 2 раза подряд через интерфейс »

Сделал. Теперь 516Мб весит (было 567).

Цитата:

Цитата y--
тогда уж не переиндексацию надо делать, а дефрагментацию индексов»

Сделал. Размер тем же остался. Так и должно быть?

y-- 08-02-2018 20:33 2796830

Avatar-Lion,
после переиндексации опять шринк - только чуть по-другому:
- шринк базы
- шринк файла данных

И вот меньше чем после этого уже никак без потери части данных...

Avatar-Lion 08-02-2018 20:42 2796834

Цитата:

Цитата ziku
Алгоритм работы "Доктор Ден" не позволит вам что ли бо изменить »

Почему? Я думал, SQL-база универсальна и любое ПО может с ней работать. И обслуживается база силами SQL-сервера, а ПО только взаимодействует с ней. Только я не понимаю почему для простого текста такие чудовищные объёмы базы получаются...

Цитата:

Цитата ziku
Похожая программа мне встречалась Dental Clinic Manager, почитай о ней может ваша фирма перейдет не неё »

Почитал. Сделано в Украине... Ничего не имею против Украины, но очевидно, что если в стране идет гражданская война, то в любой момент фирма, которая сделала это ПО, может испариться. Вон, Доктор Ден сделан некоей конторой ArtIcon. Наша компания вроде как. Ну или дилер... Когда позвонил им в тех.поддержку, там девочка на телефоне аж икнула от удивления. Потом сказала, что Доктор Ден давно уже снят с продаж и с поддержки (лет пять уже вроде как), поэтому помочь нам с данной проблемой они не могут.

Надо понять, что я не работаю в данной клинике, просто являюсь ее клиентом + ее сотрудники знают, что я занимаюсь компьютерами и время от времени обращаются ко мне со всякой мелочью (Винду переставить, комп собрать и т.п.). Ну и вот недавно обратились с проблемой, что очень долго запускается прога. Плюс в течение дня она лопает все больше и больше памяти, т.к. (по рассказам сотрудников) к концу дня комп начинает жутко тупить. Попросили меня посмотреть. Я посмотрел. Честно сказал: базы данных раньше только на картинках в интернете видел, не мой род деятельности это. Предложил поискать альтернативу. Нашли: 33 000 рублей за 1 копию программы (какой-то "1С Первый Бит" или вроде того), плюс от 50 000 до 150 000 рублей за перенос базы данных и 1 год поддержки. К ним приехал даже мальчик-представитель, начал дуть в уши... Слава богу, позвонили мне. Я когда цены услышал, сам чуть не икнул. Понятно, что медицина дешевой не бывает, но, чёрт подери, платить сто тысяч за программу, которая по сути разновидностью Excel-таблички является... Сказал им мальчика отпустить, за информацию поблагодарить и усиленно искать альтернативы. А я пока попробую с базой помочь. Но судя по вашим словам, Доктор Ден этот конкретную свинью им подложил. Точнее, не Доктор Ден, а ArtIcon.

y--, Сделал. Итого 467Мб получилось.

Но я считаю, что это всё равно Over-дохрена. Как можно ТЕКСТ раздуть до 467 метров? Я видел Excel-прайсы на десятки тысяч позиций и они весили куда меньше, а открывались куда быстрее. Что за хрень с этим SQL? Он что, по 100500 раз дублирует каждую строчку? Я ради прикола попробовал упаковать dd_Current_Data в RAR-архив. Получился архив со смешным объёмом в 12 (двенадцать!) мегабайт. Такой впечатляющий коэффициент сжатия только у текста может быть, я уже сжимал ранее таблицы и документы, они тоже очень хорошо сжимались. Можно как-то определить что такой объем занимает в базе?

ziku 08-02-2018 21:18 2796838

Цитата:

Цитата Avatar-Lion
в любой момент фирма, которая сделала это ПО, может испариться »

Есть очень много программ: 2V:Стоматология, IDENT, Dental4Windows, Dental Cloud, ClinicIQ, ДЕНТ и другие. Но как понимаешь они все платные. Сколько и что в них я не знаю.
Насчет фирмы тут вы правы, с не братьями лучше не связываться. Дороже будет.
А насчет вашей программы мы не знаем на каком движке он сделан и алгаритм работы тупой - открыть всю базу сразу. Тут ответ таков они начали тестиовать свою программу и получили в текстовом файле размер в три раза больший, тогда применили архивацию и сжатие в MDF, меньше размер, НО, болезнь та же - программа не будет работать пока весь файл не войдет в ОЗУ. И ничего тут не сделаешь.

y-- 08-02-2018 21:42 2796846

Avatar-Lion,
Цитата:

Цитата Avatar-Lion
Можно как-то определить что такой объем занимает в базе? »

Можно конечно разбивку по таблицам(количество занимаемых страниц данных на таблицу после умножения на 4К даст реальный размер) сделать, но смысла в этом нет. Навскидку можно предположить две вещи: использование CHAR вместо VARCHAR и наличие чего-то типа кладров(адресных данных притом скорей всего по всей РФ) в базе - ни с тем ни с другим бороться не удастся - первое зависимо от реализации самой программы, а второе скорей всего необходимо...

Avatar-Lion 08-02-2018 22:03 2796856

Эхе-хе... Как же грустно всё... Ладно. Спасибо вам, товарищи. Информацией и советами поделились, а это главное.

Думаю, тему можно закрывать. Судя по всему, проблема тупиковая и решения не имеет.

Busla 09-02-2018 09:57 2796914

Цитата:

Цитата Avatar-Lion
олько я не понимаю почему для простого текста такие чудовищные объёмы базы получаются... »

Наверняка, как заметил y--, не обошлось без сопутствующих справочников. И БД - это не всё-таки не просто тупое хранилище - индексы зачастую занимают места даже больше чем сами данные; есть некоторые внутренние данные - статистика, например; данные скорее разряжены, чем упакованы.


Время: 23:00.

Время: 23:00.
© OSzone.net 2001-