|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikНикакого, я просто объяснил почему несмотря на критическую секцию здесь используются две транзакции а не одна это как раз и есть чушь. Паттерн с использованием двух транзакций происходит от нежелания закрывать недофетченный курсор, при завершении единственной транзакции которая обновила запись. От наличия нескольких приложений работающих с теми же таблицами это никак не зависит. > Поля используются практически все, их очень много, чтобы по отдельности выписывать. ну да. А то что это влияет на ширину резалтсета для сортировки конечно не думаем. Да и тащить по сети лишнее это конечно круто, она же жирная выдержит. > в WHERE поля без уточнения, согласен, но это косметика. Во-первых это потенциальные грабли, на которые со временем наступишь. А во-вторых вот смотрю я сейчас на твой запрос и не понимаю можно ли его улучшить или нет, потому что не понятно что именно фильтруется. > Условий фильтрации много, ну и что? Все нужны. Его наверняка можно упростить, пусть даже не для сервера, а для самого себя чтобы понимать проще было. ДА и не верю я что нельзя придумать чуть более прямую схему фильтрации. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 09:48 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Симонов Денисэто как раз и есть чушь. Паттерн с использованием двух транзакций происходит от нежелания закрывать недофетченный курсор, при завершении единственной транзакции которая обновила запись. От наличия нескольких приложений работающих с теми же таблицами это никак не зависит. Всегда все пишут, что пишущая транзакция должна быть короткой при многопользовательском доступе. Если и селект и апдейт засунуть в одну долгую пишущую транзакцию, то что это никак не повлияет на доступ к тем же таблицам из другого приложения? Особенно учитывая что запросы фактически непрерывно. Симонов Денисну да. А то что это влияет на ширину резалтсета для сортировки конечно не думаем. Да и тащить по сети лишнее это конечно круто, она же жирная выдержит. Для FB используется ROWS 1, для MS SQL - TOP 1. Увеличивать и так гигантский текст SQL перечислением нескольких десятков полей особо желания не было. Этот так важно? Симонов ДенисВо-первых это потенциальные грабли, на которые со временем наступишь. Это понятно Симонов ДенисЕго наверняка можно упростить, пусть даже не для сервера, а для самого себя чтобы понимать проще было. ДА и не верю я что нельзя придумать чуть более прямую схему фильтрации. Сомнительно. Все условия разнородные, скорее всего упростить можно только уменьшив количество возможностей, чего не хотелось бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 10:08 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikVlad FMolochnik, Это очень даже не странно, это стандарт. Странно что в микрософте об этом знали :) Да это, поди, сделали еще те, у кого майкрософт это дело скупила.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 10:12 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikЕсли и селект и апдейт засунуть в одну долгую пишущую транзакцию, то что это никак не повлияет на доступ к тем же таблицам из другого приложения? а почему это она должна быть долгой? В твоём SELECT выбирается одна жалкая запись. Если это делается долго, то нужно запрос оптимизировать. > Этот так важно? пока не увидел план сказать не могу, но почему-то у меня подозрения что сортировка не планом ORDER идет, а через SORT и тогда это действительно важно > Сомнительно. Все условия разнородные, скорее всего упростить можно только уменьшив количество возможностей, чего не хотелось бы. я уверен что это можно сделать. Просто вы проектируете в лоб: одно поле — один фильтр ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 10:21 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Molochnik, про потоки. - в одном коннекте у ФБ параллельные операции не работают. Они будут ждать друг друга и выполняться последовательно. В других серверах точно так же. 1 поток - 1 коннект. - если потоки сериализуются по условиям задачи, то зачем они вообще нужны? Ради прикола, написать какой-то интересный в данный момент код? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 10:56 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikСмысл этого простой - очередь. Каждый поток по очереди выбирает первую доступную запись для обработки и помечает ее как используемую. Если потоки будут читать одновременно они могут выбрать одну и туже запись. сделайте один поток, ответственный за распределение заданий из очереди зы поговаривают зубы можно per rectum удалять, но зачем ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 11:00 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Симонов ДенисMolochnikЕсли и селект и апдейт засунуть в одну долгую пишущую транзакцию, то что это никак не повлияет на доступ к тем же таблицам из другого приложения? а почему это она должна быть долгой? В твоём SELECT выбирается одна жалкая запись. Если это делается долго, то нужно запрос оптимизировать. В реальности две таблицы большие остальные очень маленькие. С увеличением числа записей скорость выборки в FB ощутимо падает, при наличии 10 тыс в двух больших таблицах еще более менее, но если по 50 тыс то каждый запрос секунды две длится. В MS SQL скорость в первом приближении от размера не зависит. Как я уже говорил таблицы, поля и индексы обеих баз одинаковы и тексты запросов тоже. Симонов Дениспока не увидел план сказать не могу, но почему-то у меня подозрения что сортировка не планом ORDER идет, а через SORT и тогда это действительно важно Посмотрел в ibexpert там действительно вначале идет PLAN SORT... Симонов Денися уверен что это можно сделать. Просто вы проектируете в лоб: одно поле — один фильтр Да было бы неплохо kdvMolochnik, про потоки. - в одном коннекте у ФБ параллельные операции не работают. Они будут ждать друг друга и выполняться последовательно. В других серверах точно так же. 1 поток - 1 коннект. так и устроено один поток - один коннект. kdvMolochnik, - если потоки сериализуются по условиям задачи, то зачем они вообще нужны? Ради прикола, написать какой-то интересный в данный момент код? Работа с базой не является основной целью программы, а полезная деятельность отлично распараллеливается. Критическая секция используется только для выборки данных. Дегтярев Евгенийсделайте один поток, ответственный за распределение заданий из очереди Так делать не хочу поскольку в данном случае считаю это излишним усложнением. И зачем тогда вообще сервер баз данных использовать? Сделал всю работу с бд через один поток и радуйся. Работа с файловыми таблицами парадокса быстрее любого SQL сервера на порядок. Там где не используется бд, этот механизм (один поток для обработки информации) я использую часто, но с базой желания нет. Тем более как я уже сказал MS SQL работает как и надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 11:30 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikС увеличением числа записей скорость выборки в FB ощутимо падает, при наличии 10 тыс в двух больших таблицах еще более менее, но если по 50 тыс то каждый запрос секунды две длится. В MS SQL скорость в первом приближении от размера не зависит.Ну так там и кеш не 16МБ, не так ли ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 11:37 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Ну и уж истины ради только... Увидим мы статистику выполнения реального запроса, который "тормозит в сравнении с таким же на MS SQL) или нет? А также конфиг сервера firebird SQL и заголовок статистики базы ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 12:09 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikТем более как я уже сказал MS SQL работает как и надо. но это не значит что сделано все как надо Если инкапсулировать логику работы с очередью, то реализации могут максимально использовать особенности выбранных способов хранения и нюансы этой логики не будут размазаны по воркерам ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 12:13 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Файл конфига FB 3 приложен. Для FB2.5 настроек специальных никогда не делалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 12:46 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Вот лог с тестированием одного селекта при 50 тыс записей для FB И MS SQL, работает только один поток. Первые записи - идет выборка с FB, последние - с MS ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 12:48 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Molochnik#hqbird traceapi plugin should be in plugins folder! TracePlugin = fbtrace2db так у тебя HQBird? Или просто скопировал бездумно? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 12:55 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
400-500ms на получение задачи из очереди это "как и надо"? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 12:56 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Дегтярев Евгений, у него фильтрация записи мутная. Т.е. если сам SELECT запрос медленный, то там чего не делай с прикладой всё равно работать будет отвратительно ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 13:04 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Дегтярев ЕвгенийЕсли инкапсулировать логику работы с очередью, то реализации могут максимально использовать особенности выбранных способов хранения и нюансы этой логики не будут размазаны по воркерам По мне текущая архитектура выглядит логично - каждый поток выбирает подходящую ему незанятую запись и обрабатывает ее столько сколь считает нужным. Ваш вариант с одним потоком обработчиком базы сильно усложняет систему потому, что НЕ ВСЕ записи подходят потоку и время обработки записи потоком неизвестно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 13:11 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikКритическая секция используется только для выборки данных. к чему тогда откровения по поводу потоков и критических секций? Это уже внутреннее дело вашего приложения, которые к работе с БД не относятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 13:13 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Симонов Денистак у тебя HQBird? Или просто скопировал бездумно? да тупо скопировал оптимизированный конфиг для суперсервера. Для классик и суперклассик параметры в файле меняю на рекомендуемые оптимизированные с того же сайта. Дегтярев Евгений400-500ms на получение задачи из очереди это "как и надо"? ну, скажем так приемлемо. Сама обработка записи может десяток секунд идти kdvMolochnikКритическая секция используется только для выборки данных. к чему тогда откровения по поводу потоков и критических секций? Это уже внутреннее дело вашего приложения, которые к работе с БД не относятся. Да, ни к чему конечно, к работе с БД это не относится. Ошибся и заметил это после отправки вопроса ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 13:17 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikПо мне текущая архитектура выглядит логично - каждый поток выбирает подходящую ему незанятую запись и обрабатывает ее столько сколь считает нужным. Она логична, но при её реализации ты допустил две ошибки: 1) Длинная читающая транзакция не позволяет видеть изменения флага параллельными потоками, что на корню рушит логику. 2) Подавленное исключение не позволяет заметить ошибку обновления и пропустить уже захваченную другим потоком запись. Проще говоря, твоя система обработки не работает от слова "совсем" на сервере где нет грязного чтения. MS SQL - твоё всё и альтернатив нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 13:21 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovОна логична, но при её реализации ты допустил две ошибки: 1) Длинная читающая транзакция не позволяет видеть изменения флага параллельными потоками, что на корню рушит логику. У меня же читающая транзакция read_commited. Если параллельный поток закоммитил данные, неужели читающая другого этого не увидит? Как же у меня она вообще работает тогда? А она работает, причем без исключений ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 13:25 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikПо мне текущая архитектура выглядит логично - каждый поток выбирает подходящую ему незанятую запись и обрабатывает ее столько сколь считает нужным. Ваш вариант с одним потоком обработчиком базы сильно усложняет систему потому, что НЕ ВСЕ записи подходят потоку и время обработки записи потоком неизвестно. - не вижу ничего логичного - не вижу усложнения - поделите записи на группы и отдавайте обработчику нужную - время обработки тут вообще причем? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 13:28 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikКак же у меня она вообще работает тогда? Это в народе называется "дуракам везёт". MolochnikА она работает, причем без исключений Это естественно, потому что ты глушишь их секцией except. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 13:28 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Дегтярев Евгений- поделите записи на группы и отдавайте обработчику нужную /quot] Это фактически означает сдублировать работу с бд в памяти одного потока. Можно конечно, но скорости это не прибавит как уже выяснилось. Dimitry SibiryakovЭто в народе называется "дуракам везёт". Все время же везти не может MolochnikА она работает, причем без исключений Это естественно, потому что ты глушишь их секцией except. Я глушу там просто на всякий случай, по инерции, по логике хуже не будет. Исключения в дебаггере не блокируются и всегда вылазят если что. Если бы были глюки я бы уже давно этим озаботился. А так просто медленно. Если записей 100, то практически незаметно, вот с большим числом сразу это вылезло. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 13:41 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
Дегтярев Евгений- поделите записи на группы и отдавайте обработчику нужную - время обработки тут вообще причем? Это фактически означает сдублировать работу с бд в памяти одного потока. Можно конечно, но скорости это не прибавит как уже выяснилось. Dimitry SibiryakovЭто в народе называется "дуракам везёт". Все время же везти не может Dimitry SibiryakovЭто естественно, потому что ты глушишь их секцией except. Я глушу там просто на всякий случай, по инерции, по логике хуже не будет. Исключения в дебаггере не блокируются и всегда вылазят если что. Если бы были глюки я бы уже давно этим озаботился. А так просто медленно. Если записей 100, то практически незаметно, вот с большим числом сразу это вылезло. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 13:43 |
|
Firebird vs MS SQL
|
|||
---|---|---|---|
#18+
MolochnikЭто фактически означает сдублировать работу с бд в памяти одного потока. Можно конечно, но скорости это не прибавит как уже выяснилось. оставим тему про дублирование, я понял что для вас значит усложнение... вернемся к скорости в вашем случае выбрать одну запись или 10 по времени одинаково, потому выхлоп будет но сначала оптимизируйте запрос/структуру (которых мы так и не увидели) в мсскл у вас та же проблема - 0.5 сек для выборки 1 записи из очереди много ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2019, 13:56 |
|
|
start [/forum/topic.php?fid=40&msg=39775540&tid=1560461]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
124ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 239ms |
0 / 0 |