|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Не нравится и вызывает сомнения метод %BuildIndices. Как он работает, по-моему видению: включается $sortbegin, прочитываются все записи, индекс при этом неявно хранится в CACHETEMP, после этого выполняется $sortend, который сбрасывает все данные в глобал индекса. Еще можно перед постройкой индекса удалить его. Что мне не нравится: 1. Если таблица большая, очень сильно распухает CACHETEMP 2. Нет возможности исправить неверные записи индекса, для этого придется перестроить его с удалением, что приведет к выводу его из строя. Конечно, можно отключить карту индекса от использования в SQL, но это не во всех версиях Каше есть, на EmbedSQL он не повлияет, да и скорее всего это очень плохо скажется на быстродействии. 3. Не проверял, но из механики работы постройки индекса следует, что если во время постройки индекса изменились данные (а строиться он может несколько часов), то построится он с уже неверными данные. На отдну запись данных будет указывать две индексных - со старым значением и с новым. 4. Если таблица большая и нужно построить потерянные записи индексов, возможности этого нет. Нужно перестраивать индекс целиком, что свалит очень много данных в журнал с соответствующими последствиями (засорение диска, нагрузка на сеть при зеркалировании) Переубедите меня. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2017, 21:04 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
И да, у всего этого нет никакого индикатора процесса. Не знаешь, сколько еще ждать - 10 минут или пару дней. Можно, конечно, в переменные процесса полезть, но это не очень удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2017, 21:13 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
А версия какая? Что хорошо в Caché, то что если не нравится, то сделай сам, никто не мешает, все для этого есть. и SQL будет по индексам этим работать, это если все правильно самому сделать, за то нравится будет. Я если честно давно с кашевыми индексами не работал, в предыдущем проекте ими не пользовались, на текущем проекте пока и без них дел хватает. Но насколько я знаю, в деле переиндексации, там много подвижек. Более того и в SQL ожидались еще хорошие изменения. Антон еще в прошлом году на саммите показывал распределенные таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2017, 22:27 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Кстати, индексы всё время глючат. Приходится перестраивать каждые два дня для всех таблиц, иначе sql начинает не те результаты возвращать. Например, обычный запрос SELECT TOP 1 ID FROM MyTable - возвращает запись с ИД=15, хотя до этого есть строки с ИД=3, 4, 8 и т.д. Если сделаю выборку SELECT TOP 1 ID, * FROM MyTable, то вернется правильная строка с ИД=3. Ну как такое лечить? Уже как-то страшно и задумываешься каждый раз, а стоит ли индекс то делать для свойства... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2017, 23:56 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Версия каши 2015.2. Причем я перестраиваю через портал индексы, а выборка всё равно кривая получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2017, 23:59 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Виктор88, Похоже вы не умеете их готовить. Проблемы с индексами наблюдал, но обчно такое происходит при хорошей такой нагрузке. Версию 2015.2 можно попробовать обновить, ведь уже есть 2017.1. Перестраивать через портал конечно можно, но есть не думаю что получишь так полный контроль. И счастью в каше несложно выяснить причины такого поведения. Для этого нужно читать планы запросов. И не забываем, что при добавлении нового индекса, его нужно проиндесировать. А план запроса позволяет понять какие индексы используются. А переиндексация иногда может потребовать удаления старого индекса. И бездумно добавлять индексы тоже нельзя, что, тоже может приводить к неправильному выбора индекса при построении запроса. И индексы тоже бывают разные, все нужно учитывать и понимать зачем и почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2017, 01:20 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
DAiMorА версия какая?Он у них менялся? DAiMorЧто хорошо в Caché, то что если не нравится, то сделай сам, никто не мешает, все для этого есть. Это точно! Но для того, чтобы делать универсальные механизмы такого рода, нужно быть уверенным, что на 100% понимаешь все условности, и что эти условности в следующей версии не изменятся. И метод постройки индекса скрыт, в %Library.Persistent он Код: sql 1.
, а прикладном классе уже готовый код. Правда, я думаю, что умолчания для индексов не изменятся, разве что добавятся новые фичи. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2017, 07:19 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Виктор88, а чем она кривая? Пока никакого криминала не вижу. Если вы запросите SELECT ID, * FROM MyTable, то вернет все записи? Я надеюсь, да (если нет, то действительно ошибка). Ну вот первая запись вернется, если вы добавите top 1. А порядок в запросе вы не задаете, Каше может выборку вам отдать, используя любой индекс. Хотя странно, для вашего запроса логичнее всего идти не используя индексы. Возможно, у вас все-таки другой запрос. Для того, чтобы была правильная сортировка и у вас был правильный TOP 1, добавьте в вашу конструкцию order Если же у вас становятся неправильными индексы, что вообще говоря, странно (хотя вообще странно, что в таком запросе они используются) и происходит в совершенно немистических случаях, как например, когда программист прикладным кодом начинает править карты данных или индексов (глобалы *I и *D), модифицировать их через запросы с модификатором %NOINDEX, модифицировать их используя EmbedSQL, который скомпилирован до изменения структуры хранения класса и так далее. Для того, чтобы для запроса использовались правильные индексы рекомендую регулярно, например, раз в год просчитывать селективности глобалов через $system.SQL.TuneTable. Для того, чтобы убедиться, что запрос работает правильно, смотрите планы запросов. В некоторых случаях можно посмотреть сгенерированный код. Ну а если вы после всего этого вам что-то осталось непонятным - задавайте вопросы на форуме (если у вас не оплачена поддержка Интерсистемс - но скорее всего она у вас не оплачена) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2017, 07:34 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Блок А.Н.2. Нет возможности исправить неверные записи индекса, для этого придется перестроить его с удалением, что приведет к выводу его из строя. Конечно, можно отключить карту индекса от использования в SQL, но это не во всех версиях Каше есть, на EmbedSQL он не повлияет, да и скорее всего это очень плохо скажется на быстродействии. ... 4. Если таблица большая и нужно построить потерянные записи индексов, возможности этого нет. Нужно перестраивать индекс целиком, что свалит очень много данных в журнал с соответствующими последствиями (засорение диска, нагрузка на сеть при зеркалировании) 1. $SYSTEM.OBJ.ValidateIndices() проверяет индексы и исправляет ошибки в них http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GSQLOPT_indices#GSQLOPT_indices_validate 2. Рекомендации по перестройке индексов на работающей системе: http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GSQLOPT_indices#GSQLOPT_indices_build_readwrite ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2017, 11:36 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Александр Коблов, Про $SYSTEM.OBJ.ValidateIndices() не знал, спасибо. Это отличные нововведения, но они появились в 2015.1, а применение таких систем, как Каше всегда очень сильно отстает. Я, например, сейчас работаю с 2010.2, а максимальная версия, с которой я серьезно работал - 2014.1. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2017, 14:02 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Блок А.Н....применение таких систем, как Каше всегда очень сильно отстает...Соглашусь, некая инерция обычно присутствует. Например, когда большой тираж у разработчика, зачастую просто нет физической возможности (да и особого стимула) выпускать/тестировать/поддерживать свой софт под каждой новой версией Cache. Мы обычно затеваем кампанию по смене версии 1 раз в 2-3 года. В прошлом году перевели всех на Cache 2015.1.4. Но очень сильно "от паровоза" всё же лучше не отставать: - Можно нарваться на несовместимость с актуальной версией ОС. Например, проблемы с установкой Cache 2010.x под Red Hat (CentOS) 6 начались сразу, как только вышел сей Red Hat. - В WRC имеют право отказать в выпуске ad hoc'а к устаревшей версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2017, 16:00 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Виктор88Версия каши 2015.2. Причем я перестраиваю через портал индексы, а выборка всё равно кривая получается.И вот еще - не делайте такие операции, как перестройка индексов из портала. Делайте лучше из терминала - так проще можно увидеть ошибки, если они есть, и заодно удостовериться, что перестройка вообще закончилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2017, 18:35 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
DAiMorАнтон еще в прошлом году на саммите показывал распределенные таблицы.Намекните, про что это? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2017, 18:44 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Блок А.Н.DAiMorАнтон еще в прошлом году на саммите показывал распределенные таблицы.Намекните, про что это?если кратко, то это шардинг. в ecp конфигурации, можно создать таблицу с хранением на нескольких серверах. запрос выполняемы на мастер ноде выполняется удаленно на дочерних, и возвращает результат общий ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2017, 19:02 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
DAiMor... в ecp конфигурации, можно создать таблицу с хранением на нескольких серверах...Такие таблицы, и конечно же глобалы, можно было создавать "всегда", правда без двухфазной фиксации транзакций. Неужели сделали? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2017, 19:43 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
DAiMorесли кратко, то это шардинг. в ecp конфигурации, можно создать таблицу с хранением на нескольких серверах. запрос выполняемы на мастер ноде выполняется удаленно на дочерних, и возвращает результат общийЭм. ECP - это удаленные базы данных по сути. Разбить таблицу - настроить ее хранение маппингом глобалов на разные базы данных (только с индексами непонятно как). В чем именно новизна? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2017, 19:57 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Блок А.Н., Не совсем верно, не в маппинге дело, а в том что sql запрос разделяется на все ноды, и выполняется удаленно на тех серверах, где хранятся данные. Да по сути, это схема обратная обычно предлагаемой для ECP, когда предполагалось, наличие одного сервера данных и несколько серверов приложений, в данном слоучае добавляется назад слой серверов с данными, которые могут раздельно хранить их на отдельных серверах, дисках и прочее. Так можно повысить быстродействие системы. Хотя она уже и сложнее становится в плане поддержания отказоустойчивости. Но доступ к этим данным должен быть только через основной сервер, он знает на каком дочернем сервере лежит нужная порция данных, и при запросах выполнение отправляет им, а потом просто собирает. т.е. основной сервер сам данные не читает из глобалов по маппингу. Alexey Maslov, Конечно, то что предлагается, можно было реализовать и самому. Но а теперь эта возможность будет из коробки. Ну насчет сделали, еще пока неясно, пока только показали год назад, но как видим еще не попало не в один релиз, и нету в fieldtest. Посмотрим, что скажут в этом году. Пока был один из основных минусов. В том что такое можно провернуть только с новыми таблицами. Создаешь таблицу, указываешь по какому полю или еще как распределять данные по нодам, грузишь данные, и готово. Все данные хранятся независимо на отдельных серверах, если на них выполнить запрос, он сработает и выдаст только то что имеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2017, 21:23 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
DAiMor, т.е. тут не просто удаленный доступ к данным, но и сами программы выполняются на других серверах? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2017, 09:45 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Блок А.Н.DAiMor, т.е. тут не просто удаленный доступ к данным, но и сами программы выполняются на других серверах?Все верно ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2017, 09:45 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
DAiMor...основной сервер сам данные не читает из глобалов по маппингу.Если я правильно понял, то для доступа к таким таблицам маппинг вообще не должен использоваться, вся работа с данными должна идти через основной сервер. Тогда становятся возможны и распределённые транзакции, которые несовместимы с классической ECP-моделью, вообще говоря, всегда позволявшей реализовать шардинг через маппинг. Интересно, какой транспорт используется для взаимодействия между основным сервером и дочерними, и откроет ли InterSystems соответствующее API? DAiMorПока был один из основных минусов. В том что такое можно провернуть только с новыми таблицамиГлавный минус в том, что "такое можно провернуть" лишь для SQL-доступа. Где хвалёная мультимодельность Cache'? Мы, например, почти не используем SQL-доступ, как и многие крупнейшие партнёры InterSystems в других странах. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2017, 15:30 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Alexey MaslovГлавный минус в том, что "такое можно провернуть" лишь для SQL-доступа. А вот я не вижу ограничений в этом, и думаю что такое может и будет реализовано. Если нет, то пользы от этого не сильно много. Думаю что на каше не просто сделать приложение только на SQL, и как бы тогда вопрос а зачем так делать. Ну да маппинг наверно не нужен, только если для возможности передать результат выполнения запроса, некие глобалы для таких буферов. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2017, 16:08 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Что касается предстоящего GlobalSummit 2017 в этом году То я в списке не вижу отдельной сессии про такую возможность, хотя есть про оптимизацию SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2017, 16:17 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
Для меня этот спор как спор двух раввинов о том, можно ли считать кошерным яйцо, снесенное курицей в субботу, просто ни о чем. Да ни в одном промышленном приложении с критичными требованиями по производительности никто не будет всерьез закладываться на ускорение чего-то там с помощью индексирования SQL-доступа в Cache. Лично я воспринимаю SQL-доступ просто как забавную игрушку, надстройку. Вспомните,DAiMor, Летограф. Там весь Engine основан на собственных битовых индексах с чанками. И процедура перестройки индексов своя. И всякие там оптимизации тоже свои. Хороши бы мы были, если бы подумали, что кашовые индексы сделают за нас работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2017, 20:21 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
EvLaUy, Вы не поверите, пишут даже на объектах. Мало того, объектность Каше заявляется как одно из главных качеств. Между тем, по соотношению производительность/затраты на оптимизацию SQL делает как объекты, так и всякие велосипеды на глобалах. И если производительности SQL не будет хватать, есть огромный смысл добавить оборудования, а не бросать все и переводить на новый собственный движок. Тем более, как правило, проблемы со скоростью возникают когда уже есть куча данных и система давно в эксплуатации. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2017, 21:36 |
|
Не нравится постройка индексов от Интерсистемс
|
|||
---|---|---|---|
#18+
EvLaUyДля меня этот спор как спор двух раввинов о том, можно ли считать кошерным яйцо, снесенное курицей в субботу, просто ни о чем. Да ни в одном промышленном приложении с критичными требованиями по производительности никто не будет всерьез закладываться на ускорение чего-то там с помощью индексирования SQL-доступа в Cache...Да мы в общем-то и не спорили, пока вы не подключились :) По поводу "ни одного" я не был бы столь категоричен: с тех пор, как InterSystems всерьёз занялась прикладными разработками (т.е. последние лет 15) они сами и являются первыми пользователями своих системных новшеств. Даже поверхностного знакомства с TrackCare достаточно, чтобы понять, насколько активно там используется SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2017, 22:33 |
|
|
start [/forum/topic.php?fid=39&fpage=7&tid=1556341]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 350ms |
total: | 514ms |
0 / 0 |