|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Имеется многопотоковое дельфийское приложение, у каждого потока свое соединение к общей базе. Через Unidac может работать с Firebird и MS SQL. Каждый поток выполняет (регулярно и часто) одинаковый для всех сложный SELECT, и затем одинаковый для всех простой UPDATE, со своим набором параметров. При тестировании обнаружил, что с MS SQL программа работает быстро и реально многопотоково, а с Firebird выглядит так как будто каждый поток ждет когда до него дойдет очередь выполнять запрос, в итоге получается а разы медленнее чем с MS SQL. Тестировал на FB2.5 и FB3.0 со всеми архитектурами, ситуация примерно одинакова. В какую сторону смотреть? Не может же быть, что Firebird в разы хуже MS SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2019, 23:50 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Molochnik, давай сюда тест, повторимый. Иначе о чем. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 00:09 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Поменять сообщение видимо нельзя, поэтому добавлю, что все запросы делаются через критическую секцию, т.е. фактически эти запросы к базе выполняются потоками по очереди, но это не мешает MS SQL обрабатывать их очень быстро в отличии от FB. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 00:11 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Molochnik, набросать тест? А ты, не имея его исходников, начнешь угадывать, насколько он соответствует твоим задачам. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 00:20 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Фэйтл ЭраMolochnik, давай сюда тест, повторимый. Иначе о чем. Сильно много усилий придется потратить такой тест сделать, фактически надо с нуля тестовое приложение написать. Если без этого никак проще оставить как есть и не париться. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 00:23 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Molochnikпроще оставить как есть и не париться Если допустимо не оптимизировать - не оптимизируй. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 00:25 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Фэйтл ЭраMolochnikпроще оставить как есть и не париться Если допустимо не оптимизировать - не оптимизируй. Наверное так и оставлю, в принципе работает, посмотрел как запрос выполняется в IBExpert, все вроде корректно, в плане куча джойнов и индексов, "natural" только один, в таблице где обычно 1-2 записи. Чтобы оптимизировать вероятно нужно будет сильно потрудиться. Не стоит игра свеч наверно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 00:33 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikПри тестировании обнаружил, что с MS SQL программа работает быстро и реально многопотоково Molochnikвсе запросы делаются через критическую секцию, т.е. фактически эти запросы к базе выполняются потоками по очередиТы определись - "реально многопотоково" или таки "по очереди" ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 00:45 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikКаждый поток выполняет (регулярно и часто) одинаковый для всех сложный SELECT, и затем одинаковый для всех простой UPDATE, со своим набором параметровА коммит - где ? В MSSQL - автокоммит небось, а у FB нужно явно делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 00:47 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
hvladТы определись - "реально многопотоково" или таки "по очереди" Да, ошибся поправить вопрос уже было нельзя. с базой приложение работают фактически однопотоково. Просто визуально MS SQL работал намного быстрее и выглядело так, будто потоки выполняют запросы одновременно. hvladА коммит - где ? В MSSQL - автокоммит небось, а у FB нужно явно делать. Нет все явно, для каждого потока две формальных транзакции, первый (SELECT) SQL выполняется в читающей, второй (UPDATE) - в пишущей. Для FB у читающей 'Params=read;wait;read_committed;rec_version', у пишущей 'Params=write;wait;read_committed;rec_version', читающая постоянная, пишущая - открывается, закрывается. Для MS SQl формально выглядит так же, транзакции без параметров. Зачем вообще две транзакции, если все равно запросы выполняются в критической секции? Потому что имеется еще другое приложение, которое тоже может работать с этими таблицами, но оно выполняет запросы вручную и в тесте не участвует. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 06:29 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Код в каждом потоке выглядит примерно так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
SQL селект очень большой, упрощенно (уменьшено раза в 3, но суть ту же) выглядит так: Код: sql 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. 36. 37. 38. 39. 40. 41.
SQL апдейт очень простой: Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 07:54 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikИмеется многопотоковое дельфийское приложение, у каждого потока свое соединение к общей базе <..>. Милый друг, ну а зачем же ты тогда критические секции в них запихал? И что будет, если обращение к ним (секциям) просто закомментировать? И если уж на то пошло, то мерить/сравнивать тебе надо, для начала, простое последовательное выполнение тех запросов в цикле. Слелай циклы на тысячу итераций к каждому серверу (вот тебе саамый простой тест), засеки время и озвучь результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 08:28 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Molochnik, за такой SELECT надо руки отрывать, без относительно того на каком сервере это выполняется ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 08:32 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Vlad FМилый друг, ну а зачем же ты тогда критические секции в них запихал? Смысл этого простой - очередь. Каждый поток по очереди выбирает первую доступную запись для обработки и помечает ее как используемую. Если потоки будут читать одновременно они могут выбрать одну и туже запись. Vlad FИ если уж на то пошло, то мерить/сравнивать тебе надо, для начала, простое последовательное выполнение тех запросов в цикле. Слелай циклы на тысячу итераций к каждому серверу (вот тебе саамый простой тест), засеки время и озвучь результат. да, сделаю ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 08:34 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Симонов ДенисMolochnik, за такой SELECT надо руки отрывать, без относительно того на каком сервере это выполняется И в чем кривость? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 08:35 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikЗачем вообще две транзакции, если все равно запросы выполняются в критической секции? Потому что имеется еще другое приложение, которое тоже может работать с этими таблицами, но оно выполняет запросы вручную и в тесте не участвует. Это вообще феерический бред. Каким образом боком здесь вообще другое приложение работающее с теми же таблицаим? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 08:42 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Molochnik, во всём, начиная от table.*, поля в where без уточнений к какой таблице относятся, 100500 условий фильтрации ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 08:46 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Симонов ДенисMolochnikЗачем вообще две транзакции, если все равно запросы выполняются в критической секции? Потому что имеется еще другое приложение, которое тоже может работать с этими таблицами, но оно выполняет запросы вручную и в тесте не участвует. Это вообще феерический бред. Каким образом боком здесь вообще другое приложение работающее с теми же таблицаим? Никакого, я просто объяснил почему несмотря на критическую секцию здесь используются две транзакции а не одна ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 08:47 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Симонов ДенисMolochnik, во всём, начиная от table.*, поля в where без уточнений к какой таблице относятся, 100500 условий фильтрации Поля используются практически все, их очень много, чтобы по отдельности выписывать. в WHERE поля без уточнения, согласен, но это косметика. Условий фильтрации много, ну и что? Все нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 08:49 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikСмысл этого простой - очередь. Каждый поток по очереди выбирает первую доступную запись для обработки и помечает ее как используемую. Если потоки будут читать одновременно они могут выбрать одну и туже запись. Select for update, с с оответствующей обработкой результатов возможного отлупа в потоках, с тем чтобы они в подобной ситуации повторяли попытку поиска неиспользуемой записи? Подумай над этим. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 09:03 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Vlad FSelect for update, с с оответствующей обработкой результатов возможного отлупа в потоках, с тем чтобы они в подобной ситуации повторяли попытку поиска неиспользуемой записи? Подумай над этим. Этой конструкции нет в MS SQL поэтому я стараюсь такие не использовать. Также например не использую функцию IIF, потому что вплоть до 2008 года в MS SQL ее не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 09:18 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Molochnik, Но case то был?? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 09:30 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Vlad FMolochnik, Но case то был?? Да, как ни странно, case был. У меня сейчас совместимость вплоть до MS SQL 2000 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 09:37 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Molochnik, Это очень даже не странно, это стандарт. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 09:43 |
|
|
start [/forum/topic.php?fid=40&msg=39775273&tid=1560461]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
131ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 261ms |
total: | 492ms |
0 / 0 |