|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Всем привет, есть вопрос к сообществу. Работаю с SQL CE (4.0), один запрос (на select) выводит около 600 записей, для каждой из них выполняется несколько запросов к той же БД примерно таких GetItemByItemId, в результате все растягивается на несколько минут прежде, чем грид обновится. Все бы ничего, но старт приложения затягивается, а юзеру нечем поразвлекаться. В настоящее время в доступе к данным использую Singleton, несложно организовать и многопоточный доступ, но по моим наблюдениям время теряется на открытие соединения, а SQL CE соединение не позволяет выполнять более одного запроса за сеанс. Если кто сталкивался с такой проблемой, посоветуйте, как бороться, в сети сплошь жалобы. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 00:45 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Torreа SQL CE соединение не позволяет выполнять более одного запроса за сеанс. Чушь. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
- 2 запроса на отдном открытом соединении, отрабатывают прекрасно. Torreвыводит около 600 записей, для каждой из них выполняется несколько запросов к той же БД примерно таких GetItemByItemId Откройте учебник, и прочитайте про джойны . Row by row is slow by slow. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 06:29 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Спасибо, но доки не рекомендуют, однако даже и в этом случае проблема не решается за исключением многопоточного доступа. Джоины конечно хорошо, но не везде применимы, может грузить все данные сразу сначала в кэш и выбирать уже позже? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 09:25 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
TorreСпасибо, но доки не рекомендуют Что они не рекомендуют? Пакетные запросы и MARS? Документация этого не не рекомендует - в ней прямо написано, что это не поддерживается, но выше речь шла совсем о другом - о последовательном исполнении запросов в одном соединении. TorreДжоины конечно хорошо, но не везде применимы Пример в студию. Torreможет грузить все данные сразу сначала в кэш и выбирать уже позже? Ну, если по-другому не умеете, то ничего, кроме этого, не остается. P.S. У меня есть одна эмбеддед-базенка весом в 2 гигабайта. Если столкнетесь с такой - тоже будете всю вливать в кэш? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 09:38 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Использовать join не позволяет большое количество классов, этак можно так намакаронить, что и сам не разберешь. Кроме того, когда дело доходит до выборки по индексу, проходит какое-то время. В настоящее время загружаю по частям, первую сотню сразу вывожу в грид, остальные обрабатываю за кулисами, по окончании загрузки обновляю грид. Работает неплохо, но хотелось бы понять best practice ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 09:57 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
TorreИспользовать join не позволяет большое количество классов, этак можно так намакаронить, что и сам не разберешь. Это всего лишь проблемы кривой архитектуры, а не самого SqlCE. TorreКроме того, когда дело доходит до выборки по индексу, проходит какое-то время. Неселективный индекс, несвежая статистика, неоптимальный вид джойнов, index scan вместо index seek, итп. Изучайте план исполнения. TorreРаботает неплохо, но хотелось бы понять best practice Либо использовать рукописные запросы с джойнами, и их разбор и раскладывание по классам вручную, либо ORM+соответствующий маппинг зависимых сущностей. Во втором случае тоже будут запросы с джойнами, только ORM сгенерит их сам, и сам разложит по классам. Однако проблему индексов, статистики, и планов это не решит, в любом случае здесь придется поработать самому. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 10:06 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
TorreСпасибо, но доки не рекомендуют, однако даже и в этом случае проблема не решается за исключением многопоточного доступа. Джоины конечно хорошо, но не везде применимы, может грузить все данные сразу сначала в кэш и выбирать уже позже? Джойн - это хорошо. В принципе, все данные можно одним запросом вытащить + на клиенте отфильтровать что нужно. Второй вариант - два запроса, а на клиенте соответствие проставить. Вот что не нужно делать, так это 600 и более запросов к БД. Я голосую за джойн. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 10:53 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Arm79Я голосую за джойн.Я тоже за джоинт :) Использование джоин-а повлечет за собой написание фасада. Тогда у меня 2 варианта, написать мультипоточный доступ или фасад, пока взвешиваю, спасибо за советы, но как я понимаю, лучше данные вынуть вообще в одно приседание, раз такая с ней беда. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 11:26 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Какая-то высосанная из пальца "проблема". На мой взгляд даже не проблема, а абсолютное незнание технологии. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 11:49 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
МСУКакая-то высосанная из пальца "проблема". На мой взгляд даже не проблема, а абсолютное незнание технологии. а мне вот говорили, что SQL CE не рекомендуется использовать на мобильных ус-вах. Там нужен только SQLite. Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 10:54 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
jbond81а мне вот говорили, что SQL CE не рекомендуется использовать на мобильных ус-вах. Там нужен только SQLite. Почему? Задай этот вопрос тем, кто "говорил". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 11:04 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Torre, авторМедленная работа SQL CE Майдан головного мозга ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 11:22 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
МСУjbond81а мне вот говорили, что SQL CE не рекомендуется использовать на мобильных ус-вах. Там нужен только SQLite. Почему? Задай этот вопрос тем, кто "говорил".а СЕ разве живой?:) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 11:32 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
netivanа СЕ разве живой?:) 1. CE уже 1.5 года как не обновляется, это наводит на подозрение 2. В роадмапе вообще отсутствует 4 версия поделия. Напрашивается вывод о том, что игрушка слегонца подпротухла :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 12:24 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
МСУ, а что для embedded тогда кроме xml файла? только sqllite? Как-то пока не нужно, но для общего развития) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 12:49 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
netivanМСУ, а что для embedded тогда кроме xml файла? только sqllite? Как-то пока не нужно, но для общего развития) Ну получается что да :) http://www.sqlite.org/releaselog/3_8_2.html P.S. Расстроил ты меня... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 13:11 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
МСУ2. В роадмапе вообще отсутствует 4 версия поделия.Сроки поддержки продуктов Microsoft SQL Server Compact 4.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 13:36 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
МСУ2. В роадмапе вообще отсутствует 4 версия поделия. Напрашивается вывод о том, что игрушка слегонца подпротухла :) Сильно подозреваю, что в роадмапе по ссылке перечислено только то, для чего уже определены сроки окончания поддержки (подозреваю - потому что в справке не изложено, по каким причинам тот или иной продукт попадает в роадмап, и потому что в роадмапе отсутствуют не компакт сервера 2008 и 2012). Хотя я тоже предпочитаю sqlite - просто по причине того, что он функциональнее. SqlCE вообще какой-то совсем уж упрощенный до ниже плинтуса. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 14:02 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
sphinx_mvМСУ2. В роадмапе вообще отсутствует 4 версия поделия.Сроки поддержки продуктов Microsoft SQL Server Compact 4.0 Полезная инфа, внесу себе в рецепты. Сон Веры ПавловныХотя я тоже предпочитаю sqlite - просто по причине того, что он функциональнее. SqlCE вообще какой-то совсем уж упрощенный до ниже плинтуса. Ну просто для emdedded задач большего-то особо и не нужно. Хотя тот или иной функционал лишним не будет, согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 14:19 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, может глупо, но все же. Sqllite LINQ поддерживает? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 15:41 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
netivanСон Веры Павловны, может глупо, но все же. Sqllite LINQ поддерживает? Разумеется, нет. Он и знать про него не знает. LINQ поддерживают провайдеры под SQLite. Например, этот теоретически можно запихнуть в EF. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 15:46 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Arm79netivanСон Веры Павловны, может глупо, но все же. Sqllite LINQ поддерживает? Разумеется, нет. Он и знать про него не знает. LINQ поддерживают провайдеры под SQLite. Например, этот теоретически можно запихнуть в EF. безусловно вопрос был о провайдерах. Просто сразу знать какой использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 16:02 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Вообщем, LocalDB, который постоянно развивается, убил CE... Жалко, хорошая embedded database была. http://www.microsoft.com/en-us/sqlserver/get-sql-server/try-it.aspx#tab2 Additionally, Express customers can test a new LocalDB version for fast, zero-configuration installation. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 16:10 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
МСУВообщем, LocalDB, который постоянно развивается, убил CE... Жалко, хорошая embedded database была. Я бы не назвал LocalDB убийцей CE - ему всё же нужен инсталляция, хоть и zero-configuration. Работы с места в карьер после xcopy deployment с ним не выйдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 16:42 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныЯ бы не назвал LocalDB убийцей CE - ему всё же нужен инсталляция, хоть и zero-configuration. Работы с места в карьер после xcopy deployment с ним не выйдет. Согласен, инсталляция нужна, но MS это особо, как я понимаю, не парит и им нах не нужен in-process DLL ... Во-вторых, где embedded в основном популярна? Правильно, на планшетах и прочих мобильных девайсах. В том же Windows Phone даже LocalDB запилена. Так что для CE места совсем не осталось. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 17:33 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
автортаких GetItemByItemId Используйте курсоры в SqlCe По id они будут просто летать Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2014, 19:02 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
sigmovИспользуйте курсоры в SqlCe По id они будут просто летать Код: c# 1. 2. 3. 4.
И потом ползать по SqlCeResultSet с помощью Seek? Это будет в разы тормознее, чем один запрос с джойном. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2014, 06:34 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Какие курсоры? ORM и баста. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2014, 09:17 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
sigmov, спасибо за курсоры, проблему решил join, скорость выполнения запроса значительно возросла, сообщество подтолкнуло на верное решение. Теперь осталось разобраться как сделать 7 последовательных insert-ов за одну операцию. Может кто знает, как обмануть query processor? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2014, 10:43 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, знаю, не подходит, мне надо id получать ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2014, 14:21 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
TorreСон Веры Павловны, знаю, не подходит, мне надо id получать Получать Id от нескольких вставок за одну операцию? Это возможно только на нормальном человеческом sql server, где можно выполнить insert .. output в таблицу/табличную переменную. SqlCE не поддерживает output clause в insert. А если речь идет просто о заполнении identity-поля, то надо просто не включать его в маппинг SqlCEBulkCopy - точно так же, как и при работе с обычным SqlBulkCopy. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2014, 15:12 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныsigmovИспользуйте курсоры в SqlCe По id они будут просто летать Код: c# 1. 2. 3. 4.
И потом ползать по SqlCeResultSet с помощью Seek? Это будет в разы тормознее, чем один запрос с джойном.Я с SqlCe уже 3 проекта выполнял, поверь мне, TableDirect курсор быстрее быть не может. Специально тестировал . Вы видимо просто "не умеете/пробовали его готовить". Torre Теперь осталось разобраться как сделать 7 последовательных insert-ов за одну операцию. Может кто знает, как обмануть query processor?Открываете транзакицю и через курсор(быстрее) или sqlQuery фигачите ваши 7 записей. Коммитите транзакцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 11:30 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
sigmov, спасибо, попробую. Кстати, можно поинтересоваться, как влияет объем БД на производительность приложения? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 13:58 |
|
Медленная работа SQL CE
|
|||
---|---|---|---|
#18+
sigmovСпециально тестировал . Вы видимо просто "не умеете/пробовали его готовить". Да уж куда нам убогим. В тесте, кстати, а) SqlCE сравнивается с SQLite, которая к этой теме никаким боком; б) всё проверки идут на основании оперций над одной таблицей, а проблема, обсуждаемая здесь - энное количество обращений по id из одной таблицы к другой таблице. Ну, и раз уж речь зашла о тестах: таблицы тестовой базы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
подготовка данных: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
(консольный вывод показывает, что в Objects 222512 записей, в Columns 206738 записей - не у всех объектов есть колонки). Далее, запросом требуется вытащить из базы объекты с колонками, и смапить вот на такую структуру: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Берем вспомогательный класс: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Извлекаем данные: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Собираем в кучу, засекаем время: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Консольный вывод: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 15:24 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1403314]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 149ms |
0 / 0 |