Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Не нравится постройка индексов от Интерсистемс  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3494
Не нравится и вызывает сомнения метод %BuildIndices.
Как он работает, по-моему видению: включается $sortbegin, прочитываются все записи, индекс при этом неявно хранится в CACHETEMP, после этого выполняется $sortend, который сбрасывает все данные в глобал индекса. Еще можно перед постройкой индекса удалить его.
Что мне не нравится:
1. Если таблица большая, очень сильно распухает CACHETEMP
2. Нет возможности исправить неверные записи индекса, для этого придется перестроить его с удалением, что приведет к выводу его из строя. Конечно, можно отключить карту индекса от использования в SQL, но это не во всех версиях Каше есть, на EmbedSQL он не повлияет, да и скорее всего это очень плохо скажется на быстродействии.
3. Не проверял, но из механики работы постройки индекса следует, что если во время постройки индекса изменились данные (а строиться он может несколько часов), то построится он с уже неверными данные. На отдну запись данных будет указывать две индексных - со старым значением и с новым.
4. Если таблица большая и нужно построить потерянные записи индексов, возможности этого нет. Нужно перестраивать индекс целиком, что свалит очень много данных в журнал с соответствующими последствиями (засорение диска, нагрузка на сеть при зеркалировании)

Переубедите меня.
21 июн 17, 21:04    [20581880]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3494
И да, у всего этого нет никакого индикатора процесса. Не знаешь, сколько еще ждать - 10 минут или пару дней. Можно, конечно, в переменные процесса полезть, но это не очень удобно.
21 июн 17, 21:13    [20581893]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2322
А версия какая?
Что хорошо в Caché, то что если не нравится, то сделай сам, никто не мешает, все для этого есть. и SQL будет по индексам этим работать, это если все правильно самому сделать, за то нравится будет.
Я если честно давно с кашевыми индексами не работал, в предыдущем проекте ими не пользовались, на текущем проекте пока и без них дел хватает. Но насколько я знаю, в деле переиндексации, там много подвижек. Более того и в SQL ожидались еще хорошие изменения. Антон еще в прошлом году на саммите показывал распределенные таблицы.
21 июн 17, 22:27    [20581983]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Виктор88
Guest
Кстати, индексы всё время глючат. Приходится перестраивать каждые два дня для всех таблиц, иначе sql начинает не те результаты возвращать. Например, обычный запрос SELECT TOP 1 ID FROM MyTable - возвращает запись с ИД=15, хотя до этого есть строки с ИД=3, 4, 8 и т.д. Если сделаю выборку SELECT TOP 1 ID, * FROM MyTable, то вернется правильная строка с ИД=3. Ну как такое лечить? Уже как-то страшно и задумываешься каждый раз, а стоит ли индекс то делать для свойства...
21 июн 17, 23:56    [20582087]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Виктор88
Guest
Версия каши 2015.2. Причем я перестраиваю через портал индексы, а выборка всё равно кривая получается.
21 июн 17, 23:59    [20582090]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2322
Виктор88,

Похоже вы не умеете их готовить. Проблемы с индексами наблюдал, но обчно такое происходит при хорошей такой нагрузке. Версию 2015.2 можно попробовать обновить, ведь уже есть 2017.1. Перестраивать через портал конечно можно, но есть не думаю что получишь так полный контроль. И счастью в каше несложно выяснить причины такого поведения. Для этого нужно читать планы запросов. И не забываем, что при добавлении нового индекса, его нужно проиндесировать. А план запроса позволяет понять какие индексы используются. А переиндексация иногда может потребовать удаления старого индекса. И бездумно добавлять индексы тоже нельзя, что, тоже может приводить к неправильному выбора индекса при построении запроса. И индексы тоже бывают разные, все нужно учитывать и понимать зачем и почему.
22 июн 17, 01:20    [20582146]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3494
DAiMor
А версия какая?
Он у них менялся?

DAiMor
Что хорошо в Caché, то что если не нравится, то сделай сам, никто не мешает, все для этого есть.
Это точно!
Но для того, чтобы делать универсальные механизмы такого рода, нужно быть уверенным, что на 100% понимаешь все условности, и что эти условности в следующей версии не изменятся. И метод постройки индекса скрыт, в %Library.Persistent он
QUIT $$$ERROR($$$MethodNotImplemented,"%Persistent::%BuildIndices")
, а прикладном классе уже готовый код. Правда, я думаю, что умолчания для индексов не изменятся, разве что добавятся новые фичи.
22 июн 17, 07:19    [20582248]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3494
Виктор88,

а чем она кривая? Пока никакого криминала не вижу. Если вы запросите SELECT ID, * FROM MyTable, то вернет все записи? Я надеюсь, да (если нет, то действительно ошибка). Ну вот первая запись вернется, если вы добавите top 1. А порядок в запросе вы не задаете, Каше может выборку вам отдать, используя любой индекс. Хотя странно, для вашего запроса логичнее всего идти не используя индексы. Возможно, у вас все-таки другой запрос. Для того, чтобы была правильная сортировка и у вас был правильный TOP 1, добавьте в вашу конструкцию order

Если же у вас становятся неправильными индексы, что вообще говоря, странно (хотя вообще странно, что в таком запросе они используются) и происходит в совершенно немистических случаях, как например, когда программист прикладным кодом начинает править карты данных или индексов (глобалы *I и *D), модифицировать их через запросы с модификатором %NOINDEX, модифицировать их используя EmbedSQL, который скомпилирован до изменения структуры хранения класса и так далее.

Для того, чтобы для запроса использовались правильные индексы рекомендую регулярно, например, раз в год просчитывать селективности глобалов через $system.SQL.TuneTable.

Для того, чтобы убедиться, что запрос работает правильно, смотрите планы запросов. В некоторых случаях можно посмотреть сгенерированный код. Ну а если вы после всего этого вам что-то осталось непонятным - задавайте вопросы на форуме (если у вас не оплачена поддержка Интерсистемс - но скорее всего она у вас не оплачена)
22 июн 17, 07:34    [20582264]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Александр Коблов
Member

Откуда: Краснодар, Москва
Сообщений: 235
Блок А.Н.
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 июн 17, 11:36    [20582947]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3494
Александр Коблов,

Про $SYSTEM.OBJ.ValidateIndices() не знал, спасибо.
Это отличные нововведения, но они появились в 2015.1, а применение таких систем, как Каше всегда очень сильно отстает. Я, например, сейчас работаю с 2010.2, а максимальная версия, с которой я серьезно работал - 2014.1.
22 июн 17, 14:02    [20583539]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1382
Блок А.Н.
...применение таких систем, как Каше всегда очень сильно отстает...
Соглашусь, некая инерция обычно присутствует. Например, когда большой тираж у разработчика, зачастую просто нет физической возможности (да и особого стимула) выпускать/тестировать/поддерживать свой софт под каждой новой версией Cache. Мы обычно затеваем кампанию по смене версии 1 раз в 2-3 года. В прошлом году перевели всех на Cache 2015.1.4.

Но очень сильно "от паровоза" всё же лучше не отставать:
- Можно нарваться на несовместимость с актуальной версией ОС. Например, проблемы с установкой Cache 2010.x под Red Hat (CentOS) 6 начались сразу, как только вышел сей Red Hat.
- В WRC имеют право отказать в выпуске ad hoc'а к устаревшей версии.
22 июн 17, 16:00    [20584008]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3494
Виктор88
Версия каши 2015.2. Причем я перестраиваю через портал индексы, а выборка всё равно кривая получается.
И вот еще - не делайте такие операции, как перестройка индексов из портала. Делайте лучше из терминала - так проще можно увидеть ошибки, если они есть, и заодно удостовериться, что перестройка вообще закончилось.
22 июн 17, 18:35    [20584498]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3494
DAiMor
Антон еще в прошлом году на саммите показывал распределенные таблицы.
Намекните, про что это?
22 июн 17, 18:44    [20584511]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2322
Блок А.Н.
DAiMor
Антон еще в прошлом году на саммите показывал распределенные таблицы.
Намекните, про что это?
если кратко, то это шардинг. в ecp конфигурации, можно создать таблицу с хранением на нескольких серверах. запрос выполняемы на мастер ноде выполняется удаленно на дочерних, и возвращает результат общий
22 июн 17, 19:02    [20584545]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1382
DAiMor
... в ecp конфигурации, можно создать таблицу с хранением на нескольких серверах...
Такие таблицы, и конечно же глобалы, можно было создавать "всегда", правда без двухфазной фиксации транзакций. Неужели сделали?
22 июн 17, 19:43    [20584583]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3494
DAiMor
если кратко, то это шардинг. в ecp конфигурации, можно создать таблицу с хранением на нескольких серверах. запрос выполняемы на мастер ноде выполняется удаленно на дочерних, и возвращает результат общий
Эм. ECP - это удаленные базы данных по сути. Разбить таблицу - настроить ее хранение маппингом глобалов на разные базы данных (только с индексами непонятно как). В чем именно новизна?
22 июн 17, 19:57    [20584605]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2322
Блок А.Н.,

Не совсем верно, не в маппинге дело, а в том что sql запрос разделяется на все ноды, и выполняется удаленно на тех серверах, где хранятся данные.

Да по сути, это схема обратная обычно предлагаемой для ECP, когда предполагалось, наличие одного сервера данных и несколько серверов приложений, в данном слоучае добавляется назад слой серверов с данными, которые могут раздельно хранить их на отдельных серверах, дисках и прочее. Так можно повысить быстродействие системы. Хотя она уже и сложнее становится в плане поддержания отказоустойчивости.
Но доступ к этим данным должен быть только через основной сервер, он знает на каком дочернем сервере лежит нужная порция данных, и при запросах выполнение отправляет им, а потом просто собирает. т.е. основной сервер сам данные не читает из глобалов по маппингу.


Alexey Maslov,

Конечно, то что предлагается, можно было реализовать и самому. Но а теперь эта возможность будет из коробки.
Ну насчет сделали, еще пока неясно, пока только показали год назад, но как видим еще не попало не в один релиз, и нету в fieldtest. Посмотрим, что скажут в этом году.

Пока был один из основных минусов. В том что такое можно провернуть только с новыми таблицами. Создаешь таблицу, указываешь по какому полю или еще как распределять данные по нодам, грузишь данные, и готово.
Все данные хранятся независимо на отдельных серверах, если на них выполнить запрос, он сработает и выдаст только то что имеет.
22 июн 17, 21:23    [20584759]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3494
DAiMor,

т.е. тут не просто удаленный доступ к данным, но и сами программы выполняются на других серверах?
23 июн 17, 09:45    [20585318]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2322
Блок А.Н.
DAiMor,

т.е. тут не просто удаленный доступ к данным, но и сами программы выполняются на других серверах?
Все верно
23 июн 17, 09:45    [20585320]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1382
DAiMor
...основной сервер сам данные не читает из глобалов по маппингу.
Если я правильно понял, то для доступа к таким таблицам маппинг вообще не должен использоваться, вся работа с данными должна идти через основной сервер. Тогда становятся возможны и распределённые транзакции, которые несовместимы с классической ECP-моделью, вообще говоря, всегда позволявшей реализовать шардинг через маппинг.

Интересно, какой транспорт используется для взаимодействия между основным сервером и дочерними, и откроет ли InterSystems соответствующее API?

DAiMor
Пока был один из основных минусов. В том что такое можно провернуть только с новыми таблицами
Главный минус в том, что "такое можно провернуть" лишь для SQL-доступа. Где хвалёная мультимодельность Cache'? Мы, например, почти не используем SQL-доступ, как и многие крупнейшие партнёры InterSystems в других странах.
24 июн 17, 15:30    [20588010]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2322
Alexey Maslov
Главный минус в том, что "такое можно провернуть" лишь для SQL-доступа.

А вот я не вижу ограничений в этом, и думаю что такое может и будет реализовано. Если нет, то пользы от этого не сильно много. Думаю что на каше не просто сделать приложение только на SQL, и как бы тогда вопрос а зачем так делать.
Ну да маппинг наверно не нужен, только если для возможности передать результат выполнения запроса, некие глобалы для таких буферов.
24 июн 17, 16:08    [20588033]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2322
Что касается предстоящего GlobalSummit 2017 в этом году
То я в списке не вижу отдельной сессии про такую возможность, хотя есть про оптимизацию SQL.
24 июн 17, 16:17    [20588040]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
EvLaUy
Member

Откуда: Москва
Сообщений: 1960
Для меня этот спор как спор двух раввинов о том, можно ли считать кошерным яйцо, снесенное курицей в субботу, просто ни о чем. Да ни в одном промышленном приложении с критичными требованиями по производительности никто не будет всерьез закладываться на ускорение чего-то там с помощью индексирования SQL-доступа в Cache. Лично я воспринимаю SQL-доступ просто как забавную игрушку, надстройку. Вспомните,DAiMor, Летограф. Там весь Engine основан на собственных битовых индексах с чанками. И процедура перестройки индексов своя. И всякие там оптимизации тоже свои. Хороши бы мы были, если бы подумали, что кашовые индексы сделают за нас работу.
25 июн 17, 20:21    [20589166]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3494
EvLaUy,

Вы не поверите, пишут даже на объектах. Мало того, объектность Каше заявляется как одно из главных качеств. Между тем, по соотношению производительность/затраты на оптимизацию SQL делает как объекты, так и всякие велосипеды на глобалах. И если производительности SQL не будет хватать, есть огромный смысл добавить оборудования, а не бросать все и переводить на новый собственный движок. Тем более, как правило, проблемы со скоростью возникают когда уже есть куча данных и система давно в эксплуатации.
25 июн 17, 21:36    [20589249]     Ответить | Цитировать Сообщить модератору
 Re: Не нравится постройка индексов от Интерсистемс  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1382
EvLaUy
Для меня этот спор как спор двух раввинов о том, можно ли считать кошерным яйцо, снесенное курицей в субботу, просто ни о чем. Да ни в одном промышленном приложении с критичными требованиями по производительности никто не будет всерьез закладываться на ускорение чего-то там с помощью индексирования SQL-доступа в Cache...
Да мы в общем-то и не спорили, пока вы не подключились :)

По поводу "ни одного" я не был бы столь категоричен: с тех пор, как InterSystems всерьёз занялась прикладными разработками (т.е. последние лет 15) они сами и являются первыми пользователями своих системных новшеств. Даже поверхностного знакомства с TrackCare достаточно, чтобы понять, насколько активно там используется SQL.
25 июн 17, 22:33    [20589304]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Caché Ответить