Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
fordegans
Member

Откуда:
Сообщений: 16
Всем привет,
Написал программу которая работает с БД. все что она считает заносится в БД.
Столкнулся с проблемой при полной загрузке программы, БД становится большой, это мягко говоря.
Таблица в БД состоит из 17 столбцов, и на данный момент более 2 миллиардов строк.
При выводе информации сами понимаете провисает прилично, да и размер не маленький.

Как можно оптимизировать ее? что б быстрее работала? и уменьшить ее габариты
18 ноя 12, 15:32    [13490671]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Вывод информации - это

автор
SELECT * FROM таблицасболее2мямиллиардамистрок


?

Рекомендации по оформлению сообщений в форуме п.6 специально для Вас.
18 ноя 12, 15:37    [13490687]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
fordegans
Member

Откуда:
Сообщений: 16
выбор данных работает по таком алгоритме
- выбор года SELECT * from report where year='''+IntToStr(year[index_year]+'''
- если нужно выборка месяца SELECT * from query....... where month='''+IntToStr(index_month)+''')

То есть после выборки года создается временная таблица что б не нагружать основную где все данные за год попадали туда, после выборка производится по месяцам, точно такой же алгоритм, вся выборка производится до минуты.
18 ноя 12, 15:53    [13490742]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
fordegans
выбор данных работает по таком алгоритме
- выбор года SELECT * from report where year='''+IntToStr(year[index_year]+'''
- если нужно выборка месяца SELECT * from query....... where month='''+IntToStr(index_month)+''')


И где планы выполнения этиз запросов? Желательно еще и статистику IO и Time предоставить.

fordegans
То есть после выборки года создается временная таблица что б не нагружать основную где все данные за год попадали туда, после выборка производится по месяцам, точно такой же алгоритм, вся выборка производится до минуты.


Грузить таблицу - это сильно. Это правильно! Давайте будем грузить tempdb...
18 ноя 12, 16:01    [13490760]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
fordegans
Member

Откуда:
Сообщений: 16
С БД работаю впервые, не ожидал такой объем и такой отклик от нее....

автор
И где планы выполнения этиз запросов?


не понимаю вопрос

автор
Желательно еще и статистику IO и Time предоставить.


как вывести эту статистику?

автор
Давайте будем грузить tempdb...


получается что перенос данных в другие таблицы это было ошибкой?

ЗЫ. При тестировании, обычном выводе с таблицы, быстрее грузится нежели использовать 1 таблицу (выше писал "выбор данных работает по таком алгоритме" выборка в выборке)
18 ноя 12, 16:15    [13490782]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
С БД работаю впервые...не понимаю вопрос...как вывести эту статистику


Ну что ж, поработали с БД и хватит. Пора приступать к изучению БД (чтению документации), с которой Вы работаете...

автор
получается что перенос данных в другие таблицы это было ошибкой?


Какие данные? В какие другие таблицы? Вы не могли бы вместо лирики приводить техническое описание происходящего и проблемы, которые Вы испытываете. Или это очередная кухарка, решившая что она может управлять государством?
18 ноя 12, 16:31    [13490805]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
fordegans
Member

Откуда:
Сообщений: 16
автор
Вы не могли бы вместо лирики приводить техническое описание происходящего и проблемы, которые Вы испытываете.



автор
Столкнулся с проблемой при полной загрузке программы, БД становится большой, это мягко говоря.



при выборке из таблиц есть задержка
выбор по данным за сезон(сектор), есть таблица с уже готовыми секторами (и в таблице названия их) при такой выборке задержка более ощутима

if CheckBox_sectors.Checked=true then begin
for index_sectors:=0 to 8 do begin
if Form10.CheckListBox1.checked[index_sectors]=true then begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select Max(id) AS Max_id from sector_'+Form10.CheckListBox1.Items[index_sectors]+'');
ADOQuery1.Active:=true;
ADOQuery1.First;
max_of_sector:=ADOQuery1.FieldValues['Max_id'];
for index_accii_of_sector:=1 to max_accii_of_sector do begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('filename=(select filename from sector_'+Form10.CheckListBox1.Items[index_sectors]+'');
ADOQuery1.SQL.Add('Where id='''+IntToStr(index_of_sector)+''')');
ADOQuery1.Active:=true;
ADOQuery1.First;
Sum_profit[index_sectors]:=Sum_profit[index_sectors]+ADOQuery1.FieldValues['Sum_profit'];
end;
end;






автор
Какие данные? В какие другие таблицы?


я писал выше, при выборке данных за год они копируются в временную таблицу, из которой потом идет очередная выборка.
Но как выбрать данные а потом опять из них сделать выборку я другого решения не придумал. Возможно плохая идея, надо переделывать но как реализовать я не знаю
18 ноя 12, 16:53    [13490850]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
fordegans,

автор
БД становится большой, это мягко говоря.


А кто запрограммировал алгоритм записи данных в бд, что она становится большой? И, какой файл растет? Данных или лога?

автор
при выборке из таблиц есть задержка


Задержка, она у Валерии... Задержка рейса... У Вас то что?!

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


Зачем выбирать за год сразу, если потом из этого еще надо выбирать?!
18 ноя 12, 17:01    [13490867]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
fordegans
Member

Откуда:
Сообщений: 16
автор
А кто запрограммировал алгоритм записи данных в бд, что она становится большой? И, какой файл растет? Данных или лога


Я программировал, счас БД тока тестируется, я тестировал не более 1 недели данных. Растет таблица данных. Изза чего и увеличатся БД

автор
Зачем выбирать за год сразу, если потом из этого еще надо выбирать?!

База данных не за один год. и эта выборка обязательная.

СТОП я не верно отвел на

автор
Какие данные? В какие другие таблицы?


Здесь 2я проблема

Нашел решения 3. 2 из них тестировал, возможно 3й вариант будет корректный, но не знаю справлюсь ли я с ним

я писал тока про последний вариант, и уже понял что это плохое решения

По пунктикам:
1й вариант от которого я изначально отказался
выборка данных в одном запросе SQL. я от нее отказался на то была причина мне нужно сделать 17 выборок которые еще находятся в цикле. при продвижении в низ по выборке время отклика слишком сильно увеличивалось. я дошел тока до 8 уровня отклик уже занимал около 2х минут

2й Вариант который я здесь писал
выборка данных копируется в временную таблицу и так пока выборка не закончится. Здесь уже понял это тож не выход. БД занимать будет более 500 Гб. При создание новых таблиц понадобится место + время на копирования. Этот вариант уже тож отпадает

3й Вариант
Много поточность, решения хорошие но при 1й ошибке ее найти будет очень сложно

Получается или 1й или 3й. Если есть другие варианты подскажите



Я писал выше, с БД не работал. Делаю для себя но может не правильно я организовал БД. Нужен другой софт или железо. Без понятия
18 ноя 12, 17:57    [13490990]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
fordegans,

Полагаю, если Вы уменьшите в сообшениях кол-во слов на русском языке и будете больше приводить кода на T-SQL, выложив при этом модель данных, дело, возможно, сдвинется с мертвой точки.
18 ноя 12, 18:11    [13491022]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
fordegans
Member

Откуда:
Сообщений: 16
автор
Полагаю, если Вы уменьшите в сообшениях кол-во слов на русском языке

для уменьшения БД использую тока 1й столбец с 4 мисволами на латынеце, 2й с датой, все остальные тока целые числа


автор
и будете больше приводить кода на T-SQL

смотрел в [url=]http://ru.wikipedia.org/wiki/Transact-SQL[/url] если посмотреть тока дополнительные возможности, это не надо. БД предназначенная тока для выборки и сумы по той выборке. это все предназначения.
Но посмотреть стоит, может и возникнет идея другая, спасибо на этом есть над чем подумать
18 ноя 12, 18:25    [13491056]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
fordegans
смотрел в


Лучше в Справочник по Transact-SQL
18 ноя 12, 18:36    [13491083]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
fordegans,

Где ты столько данных взял?
18 ноя 12, 21:55    [13491750]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
fordegans
Member

Откуда:
Сообщений: 16
MasterZiv,

автор
Где ты столько данных взял?


Данные ищутся програмой по циклу если один совпадает попадает в таблицу.

Настройки цикла состоят из
2*196*5*7*49*6*7*4*6*45 = 30 494 620 800
эти циклы проверяют 6671 текстовых файлов
что совпадает заносится в БД. как уменьшить размер БД еще не придумал
19 ноя 12, 00:43    [13492264]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
становится большой
Guest
fordegans
Всем привет,
Написал программу которая работает с БД. все что она считает заносится в БД.
Столкнулся с проблемой при полной загрузке программы, БД становится большой, это мягко говоря.
Таблица в БД состоит из 17 столбцов, и на данный момент более 2 миллиардов строк.
При выводе информации сами понимаете провисает прилично, да и размер не маленький.

Как можно оптимизировать ее? что б быстрее работала? и уменьшить ее габариты

предлагаю удалить со второго по одиннадцатый, четырнадцатый и семнадцатый столбцы,
из строк оставить последние полмиллиона.
стало лучше?

P.S.
автор
Написал программу которая работает с БД. все что она считает заносится в БД.

может нужно не все что она считает запихивать в БД? может нужно программу переписать, а не два ярда шириной в 17 столбцов пендалями разгонять?
19 ноя 12, 00:49    [13492275]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
fordegans
Member

Откуда:
Сообщений: 16
становится большой,Guest, спасибо за юмор на ночь)))


Нашел решения, как укоротить БД до 16 столбцов. Не могу сказать правильное ли решения, и не будет ли код нагружать.
Решения такое:
Удалить 1й столбец он фиксирует названия текстового файла. и создать 6671 таблиц соответствующие им по 16 столбцов. (с экономит 4Мб на 1мл. значений)

Правильное ли это решения, или нагрузка по выборке прибавится еще более?
19 ноя 12, 03:14    [13492635]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
fordegans
или нагрузка по выборке прибавится еще более?
Прибавится, очень сильно.
19 ноя 12, 09:04    [13492860]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
kain111
Member

Откуда:
Сообщений: 227
Вам все-таки придется почитать теорию.
1) обратите внимание на формат ваших полей.
-Так ли вам нужно 1е поле с 4 символами, может оно повторяется многократно. тогда имеет смысл создать таблицу справочник в котором будет храниться текст и ключ в виде целого числа. который будет вставляться в основную таблицу
-Посмотрите формат ваших 17 столбцов если они всегда целые то int будет лучшим вариантом,
з.ы. И если таблица занимает много места то не факт что из за этого выборка происходит долго. Не советовал бы вам заморачиваться с этим.
2) Почитайте про индексы. надеюсь кластерный то у вас есть.
Если нет, то возможно именно в этом ваша проблема. Потому и долго идет выборка из за того. что каждый раз происходит сканирование таблицы.В этом случае и ваша временная таблица может не понадобиться.
3) Разделение. есть такая штука как секционирование, но вам очень далеко до ее применения.
19 ноя 12, 10:41    [13493137]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
fordegans
MasterZiv,

автор
Где ты столько данных взял?


Данные ищутся програмой по циклу если один совпадает попадает в таблицу.

Настройки цикла состоят из
2*196*5*7*49*6*7*4*6*45 = 30 494 620 800
эти циклы проверяют 6671 текстовых файлов
что совпадает заносится в БД. как уменьшить размер БД еще не придумал


Почитай что такое "нормализация".
19 ноя 12, 11:15    [13493327]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
fordegans
Member

Откуда:
Сообщений: 16
alexeyvg, спасибо
kain111, спасибо за наводку
19 ноя 12, 11:17    [13493342]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
НЕ дописал.
С нормализацией у тебя в выражении вычисления кол-ва строк умножение заменится сложением.
19 ноя 12, 11:18    [13493352]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
fordegans
становится большой,Guest, спасибо за юмор на ночь)))


Нашел решения, как укоротить БД до 16 столбцов. Не могу сказать правильное ли решения, и не будет ли код нагружать.
Решения такое:
Удалить 1й столбец он фиксирует названия текстового файла. и создать 6671 таблиц соответствующие им по 16 столбцов. (с экономит 4Мб на 1мл. значений)

Правильное ли это решения, или нагрузка по выборке прибавится еще более?


Решение идиотское.
19 ноя 12, 11:20    [13493365]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
fordegans
Member

Откуда:
Сообщений: 16
MasterZiv, спасибо, кажется начинаю понимать
19 ноя 12, 11:23    [13493391]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
дата тюнинг адвизор...не, не слышал ))
19 ноя 12, 11:24    [13493394]     Ответить | Цитировать Сообщить модератору
 Re: Как упростить БД? (Сжатия или разделения) для повышения быстродействия  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
kain111
Вам все-таки придется почитать теорию.
1) обратите внимание на ..


Ему не эту теорию надо читать.
Все, что изложено — мертвому припарки...
Ему надо сначала научиться структуру бд проектировать. Или хотя бы публиковать и слушать умные советы...
19 ноя 12, 11:28    [13493426]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить