|
|
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerVal2 S.G.: а у этого запроса есть план выполнения, или как оно там называется в mssql-e? Конкретно этот запрос имеет мало значения. Он слишком прост. Меня интересует время выборки для таких простыз запросов. Если такой примитив даёт задержку в 2-3 секунды, то рассматривать что-либо сложнее я не вижу смысла.Я по прежнему не вижу ничего, показывающее план выполнения, использование индексов. Только какие-то 2-3 секунды, измеренные- чем, часами? SerValРазмер базы из-за компрессии графиков уменьшился с 48 до 24 GB MB. Уже на много лучше. Однако продолжительность в 3 часов 25 минут 37 секунд. .. как-то не очень. :(Уменьшилось время передачи данных от сервера к клиентской программе, из-за компрессии (меньше данных передается). Увеличилось время обработки данных из-за компрессии-декомпрессии. По прежнему нет понимания, что надо рассмотреть несколько этапов обработки данных - выборка, передача, обработка в клиентской программе (а также анализировать каждый из пунктов в отдельности) и смотреть куда уходит время. и еще раз - размер БД и скорость выборки имеют весьма малую зависимость, если конечно бд построена правильно и не тянуть все на клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 03:57 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
Так все данные у клиента. Клиентская программа только впихивает данные SQL серверу. Выбирать пока нечего. А чтобы быстрее впихнуть, графики она компрессирует. 17 нитей впихивают 324562 участника в таблицу Users (по 20 тысяч каждая нить). Самым простым INSERT-ом безо всяких условий. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Больше ничего. Какой тут может быть план ? Индексирован сейчас только PRIMARY KEY. И что тут рассматривать? - Statistics for INDEX 'PK__Users__3213E83F1CFC3D38'. ? Все 17 нитей фактически простаивают, потому как медленнные диски не дают SQL серверу записать данные. Загрузка процессоров клиентской программой - max 25%. SQL сервером - 10-15%. И всё это из-за размера файлов базы. Лампочка диска горит не переставая. Всё время уходит в ожидание записи на диск 5-и гигабайт данных. То же самое и при тупом UPDATE. Вот вставка в пустую базу: Einstein@Home: обновление участников завершено за 48 минут. Einstein@Home: обновление компьютеров завершено за 1 часов 25 минут. Все остальные вычисления занимают ничтожное время.(для них, действительно, надо создать индексы и смотреть execution plan). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 05:19 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValЯ почему-то думаю"Мне говорят, что так будет лучше, но я думаю наоборот". Зачем тогда спрашивать? SerValВсе 17 нитей фактически простаивают, потому как медленнные диски не дают SQL серверу записать данные. И зачем тогда было спрашивать о производительности селект-запроса, если основной затык вовсе не в этом запросе, а в совершенно другой задаче - задаче быстрой записи 5Гб ненормализованных данных?? ЗЫ. Не пробовали через bulk insert (или как оно там в мсскл называется) эти же 5 Гб залить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 05:50 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 tanglir : tanglirЗачем тогда спрашивать? Я спрашивал как зранить графики, чтобы они меньше места занимали. Лучше - это когда на диск меньше пишется/читается. Потому как простой запрос select count(*) from Hosts вызывает шмурыгание диска на 3-4 секунды. Ну какие тут индексы нужны ? Или Execution Plan ? (я больше таким селестом не пользуюсь). Я уж думал поставить базы на диск с компрессией данных, да чего-то опасюсь. ***** tanglirНе пробовали через bulk insert (или как оно там в мсскл называется) эти же 5 Гб залить? Не. Входные данные сырые и кривые. Проверять надо. Сейчас переделываю: переношу графики - в другую таблицу. Формат прежний - compressed xml. ***** Ребятки, спасибо за отклики и участие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 06:36 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/09/2012 03:21 AM, SerVal wrote: > Почитал. И в чём же здесь нарушение ? В том что графики участника в его-же таблице ? Нет, в том, что их МНОГО в одной таблице. > Вообще-то, они являются неотемлемым атрибутом участника. И при перемещении их в > друную таблицу они должны быть связаны с участником череp FOREIGN KEY. > (теоретически). Ну да. Соображаешь. Ещё сообрази, как выстроить PK этой таблицы, и будет всё ОК. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 09:11 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
> Больше ничего. Какой тут может быть план ? Индексирован сейчас только PRIMARY KEY. > И что тут рассматривать? - Statistics for INDEX 'PK__Users__3213E83F1CFC3D38'. ? План. Брать и рассматривать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 09:13 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/09/2012 06:50 AM, tanglir wrote: > ЗЫ. Не пробовали через bulk insert (или как оно там в мсскл называется) эти же 5 > Гб залить? bulk copy utility, bulk copy routines. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 09:14 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/09/2012 07:36 AM, SerVal wrote: > Я уж думал поставить базы на диск с компрессией данных, да чего-то опасюсь. Не надо. > Не. Входные данные сырые и кривые. Проверять надо. Проверяй, а потом запихивай в bulk, кто ж мешает? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 09:16 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 MasterZiv : MasterZivПроверяй, а потом запихивай в bulk, кто ж мешает? Ну что Вы в самом деле.. как это ""запихивай в bulk" ? Мне ж надо сравнивать вчерашние и вновь полученные данные. Вчерашние-то куда ? В "бульк" уйдут ? И что я сравнивать буду ??? И ещё: в полученных данных полно, например, участников без имени. Нам такие товарищи в статистике не нужны. Запихиваем его в таблицу InvalidReceivedUser и продолжаем добавлять хороших в таблицу Users. ***** Я смотрю сейчас на секционированные таблицы. Может можно новые данные загружать в новые секции. А потом сравнить новое и старое, построить графики.. После чего убить старую секцию и нарезать ещё одну новую для нового дня.. итд. Не знаю, правда, не слишком ли это сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 10:23 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerVal, в общем, нужно переделать на: 1. таблица Users - данные только об участниках (id,code,name,description) 2. таблица графиков - [dbo].[Charts_Xml] структура (User_ID INT, TypeChart INT, Value XML) где TypeChart - тип графика + create nonclustered index IX_UserChart_Charts_Xml on Charts_Xml(User_ID, TypeChart) всё будет летать и про Нормальные формы почитай - интересно будет, (1НФ 2НФ 3 НФ)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 11:09 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
ну чтоб поменьше "переделывать" - Value можешь пока оставить как varchar(1000) или что там у тебя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 11:11 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValЯ спрашивал как зранить графики, чтобы они меньше места занимали. С этой точки зрения XML - наихудшее решение, даже сжатый, поскольку у него КПД (отношение полезных байт к мусорной обвеске) - считанные проценты. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 11:38 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 доброжелатель!!!! Спасибо. Я примерно так уже переделываю. Скорости это не прибавит(при нынешней структуре программы). Но уже позволит не меняя таблицы Users, добавлять/удалять графики c меньшими затратами. ***** А про нормальные формы уже почитал. Я советы не игнорирую, в какой бы форме они ни были высказаны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 11:41 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/09/2012 12:38 PM, Dimitry Sibiryakov wrote: > С этой точки зрения XML - наихудшее решение, даже сжатый, поскольку у него КПД > (отношение > полезных байт к мусорной обвеске) - считанные проценты. Дима, это копейки всё по сравнению с остальными проблемами. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 12:16 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/09/2012 11:23 AM, SerVal wrote: > Ну что Вы в самом деле.. как это ""запихивай в bulk" ? Есть bulk insert API, вызывай его вместо обычного ODBC или что ты там используешь. > Мне ж надо сравнивать вчерашние и вновь полученные данные. Вчерашние-то куда ? В > "бульк" уйдут ? > И что я сравнивать буду ??? Ну не удаляй старые данные, и будет тебе счастье. > Я смотрю сейчас на секционированные таблицы. Может можно новые данные загружать > в новые секции. Ты всё время не туда смотришь, как я посмотрю. Тебе надо 0) видимо переделать структуру БД, нормализовать. 1) оптимизировать конкретные запросы, строя под них индексы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 12:17 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovSerValЯ спрашивал как зранить графики, чтобы они меньше места занимали. С этой точки зрения XML - наихудшее решение, даже сжатый, поскольку у него КПД (отношение полезных байт к мусорной обвеске) - считанные проценты.+1. SerVal, на пальцах: Код: plaintext 1. 2. 3. 4. 5. 6. 7. iduseridgraphtypexy10050009.06.20120Добавляем 2 (биг)инта: +8(16)байт Убираем xml-евскую шелуху: что-то около -100 байт. PS. оффтоп, но заинтересовало, что означает эта конструкция: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 12:22 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerVal Клиентская программа только впихивает Сначала проблемы было только с чтением. Потом, оказывается, с "впихиванием". Также мелькнула мысль о том, что надо сравнивать старое и новое. Может быть, надо было еще вначале поднатужиться и дать более полное описание, а не свои идеи велосипеда? В общем, пока что: 1. xml - в топку. 2. Размер - уяснить себе смысл фразы "размер не имеет значения". 3. нормальные формы. MasterZivДима, это копейки всё по сравнению с остальными проблемами. тут одни проблемы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 12:54 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
MasterZivДима, это копейки всё по сравнению с остальными проблемами. Для хранения и выборки это может быть и копейки, но насколько я понял при добавлении данных аффтар для каждого значения: 1) вытаскивает XML 2) парсит его 3) удаляет старейшее значение 4) добавляет новейшее 5) обратно компонует XML 6) сохраняет. При таком стиле работы я удивляюсь, что он вообще способен дождаться окончания импорта. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 13:09 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
> В общем, пока что: > 1. xml - в топку. Ребята, да чем вам XML-то не угодил ? Я всегда очень против использования XML в RDB, но тут как раз тот случай, когда вполне можно использовать либо XML, либо JSON, да хоть просто текст форматированный. Это обрабатывается только на клиенте. Хочется человеку -- ну и пусть, может у него с той стороны уже (на клиенте) всё под это заточено. > MasterZiv > Дима, это копейки всё по сравнению с остальными проблемами. > > тут одни проблемы :) Согласен. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 13:27 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 MasterZiv : MasterZivЕсть bulk insert API, вызывай его вместо обычного ODBC или что ты там используешь. Ну да, я помню Этот "бульк", он ещё для SQL 2003 был, а может и раньше. Такая примочка к SQL серверу, чтобы он мог с диска C:\ файлы читать. Правда, я никак не пойму 1. отчего "бульк" будет быстрее простейшего INSERT-а. 2. зачам сначала забирать данные в память, проверять, потом опять скидывать на диск, чтобы BCP опять читал их с диска и запихивал в таблицу ? Про ODBC тоже что-то помню. Кажется, это такой старинный драйвер для чего-то. Правда не помню, где он используется и зачем. :( MasterZivУбираем xml-евскую шелуху: что-то около -100 байт. 100 байт на один день. 60 дней со значениями Compressor сжимает до 600 байт в Base64String или 420 bytes в varbinary. 2 S.G. : S.G.Сначала проблемы было только с чтением. Потом, оказывается, с "впихиванием". Ну, я же с самого начала написал, что надо как-то ужать размеры графиков, хранящихся в базе данных. S.G.Также мелькнула мысль о том, что надо сравнивать старое и новое - ну а как же. А из чего же строятся графики за неделю, месяц... ? S.G.3. нормальные формы. Так я не против чего-нибудь нормализовать. Только пока нечего нормализовывать. Скорость тупо зависит от скорости чтения/записи на диск. 2 tanglir : tanglirно заинтересовало, что означает эта конструкция: [stats_update_time] [datetime] NOT NULL DEFAULT (getutcdate()-getutcdate()), Это SQL аналог CPP и C# DateTime.MinValue.(мнимальная дата 1900 год). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 15:01 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerValПравда, я никак не пойму <, …> отчего "бульк" будет быстрее простейшего INSERT-а. Оттого, что каждый простейший INSERT — это отдельная транзакция , а «бульк», по идее, должен все данные залить в единственной транзакции . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 15:09 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
2 Dimitry Sibiryakov : Dimitry SibiryakovДля хранения и выборки это может быть и копейки, но насколько я понял при добавлении данных аффтар для каждого значения: 1) вытаскивает XML 2) парсит его 3) удаляет старейшее значение 4) добавляет новейшее 5) обратно компонует XML 6) сохраняет. При таком стиле работы я удивляюсь, что он вообще способен дождаться окончания импорта. Примерно так. Однако ж я уже писал, что 60 нитей с готовыми INSERT-ами ждут, когда SQL сервер освободится для следущей записи на диск.. Нагрузка на процессор - никакая. Ну и сам SQL сервер тоже ждёт, пока что-то запишется на диск. :( Тут никакие индексы не помогут. Средняя скорость записи SQL сервером на диск ~ 20-40 МБ в секунду. А иногда падает до 10. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 15:14 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
On 08/09/2012 04:01 PM, SerVal wrote: > 1. отчего "бульк" будет быстрее простейшего INSERT-а. Он нетранзационный. > 2. зачам сначала забирать данные в память, проверять, потом опять скидывать на диск, > чтобы BCP опять читал их с диска и запихивал в таблицу ? Чтобы проверить. К тому же, если ты будешь ипользовать bulk copy API , записывать на диск вовсе не обязательно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 16:17 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
SerVal2 Dimitry Sibiryakov : Dimitry SibiryakovДля хранения и выборки это может быть и копейки, но насколько я понял при добавлении данных аффтар для каждого значения: 1) вытаскивает XML ... 6) сохраняет. При таком стиле работы я удивляюсь, что он вообще способен дождаться окончания импорта. Примерно так. Однако ж я уже писал, что 60 нитей с готовыми INSERT-ами ждут, когда SQL сервер освободится для следущей записи на диск.. Нагрузка на процессор - никакая. Ну и сам SQL сервер тоже ждёт, пока что-то запишется на диск. :( Тут никакие индексы не помогут. Средняя скорость записи SQL сервером на диск ~ 20-40 МБ в секунду. А иногда падает до 10. :( Вообще, интересно увидеть план запроса, которым получаете Dimitry Sibiryakov1) вытаскивает XML а все остальное (парсинг, и т.д.) обрабатывается на сервере или на клиенте? И все-же, попробуйте вариант который советовали Вам раньше. Просто, одну табличку. Причем, пока без удаления данных из нее и расчета агрегатов. Залейте в нее данные, добавьте индексы чтобы была высокая селективность, и попробуйте на табличке типичные запросы. Если скорость не устроит, добавить табличку с расчитанными агрегатами. Как писали ранее, размер базы, при правильных индексах, почти не имеет значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 16:52 |
|
||
|
Как лучше хранить графики в базе данных ?
|
|||
|---|---|---|---|
|
#18+
MasterZiv > В общем, пока что: > 1. xml - в топку. Ребята, да чем вам XML-то не угодил ? Я всегда очень против использования XML в RDB, но тут как раз тот случай, когда вполне можно использовать либо XML, либо JSON, да хоть просто текст форматированный. Это обрабатывается только на клиенте. Хочется человеку -- ну и пусть, может у него с той стороны уже (на клиенте) всё под это заточено. Я вначале не имел ничего против. Вопрос звучал "как хранить" - ну если уже сделано так, пускай хранит в xml. Когда надо, вытащил пару графиков, показал. Но, оказывается, там надо не просто хранить, а активно работать с ними, обновлять и пр. Вообще, топикстартер упорно хранит тайну - что надо делать? На вопрос- "можно ли посмотреть какой из процессов самый медленный" - ответ "да и так понятно что диск виноват" На вопрос- "а что там с запросами на чтение, посмотреть план" - ответ "да зачем план, и так понятно, база большая вот и медленно". Такой вот, диалог :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 17:01 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37909924&tid=1541270]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 331ms |

| 0 / 0 |
