|
|
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
ScareCrowавторЖесть, а ведь это не редкий случай. у вас Оракел? нет, MS SQL 2005 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 18:05 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
тогда не переживайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 18:07 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
ScareCrowавторselect * from acc where code='70107810300001730701' or code is null дык о Оракела null не индексируется. поэтому этотт запрос пойдет по индексу только с извратами.дык в таблице даже значения null нет, можно по статистике было бы проанализировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 18:08 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
ScareCrowтогда не переживайте. я знаю, просто удивительно что Оракл такое пропустил. Хотя кто его знает, может в этом есть какой-то тайный смысл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 18:10 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
автордык в таблице даже значения null нет, можно по статистике было бы проанализировать попробуйте гистограммы собрать. по умолчанию они помоему не собираются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 18:12 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
SergSuper например такой запрос Код: plaintext ну и с exists у оракла совсем плохо ну ? коню ясно что если оракл нулы не индексирует то оптимайзер свалится в фулскан. мне понадобиться секунд 30 чтоб наложить function-based index и получить тот же план, что и в мсскл. экзист, обычно мне хватает 15 секунд чтоб понять чего тупит, да и обычно SQL advisor сразу говорит чего подкрутить. еще раз, эти примеры никак не показывают как получить такой план на мсскл, который не возможно заполучить в оракле. а вот например с помощью оракловых кластеров (не путать с RAC) я получил запрос выполняемый в оракле на порядок быстрее /topic/593514&pg=10&hl=%ef%eb%e0%ed#6329387 кстати там же можно полюбоваться как оптимайзер мсскл ступил трижды на элементарном запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 18:17 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
SergSuperдык в таблице даже значения null нет, можно по статистике было бы проанализировать Можно, но есть одна маленькая проблемка. Дело в том, что строить план каждый раз, когда хочется выполнить запрос - довольно накладно. По этой причине у Оракла есть замечательная оптимизация: построенный план сохраняется в кэше и применяется для других, похожих запросов. В свете этого Ваше замечательное предложение вызовет неверную работу сервера в случае, если план построен и используется, а другая сессия возьмёт да и добавит в таблицу запись с null. Ну а инвалидировать кэш по каждому insert-у, знаете ли, немного дороговато будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 18:28 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
Господи, да на любой оптимизатор можно плохих примеров накидать. И на наш тоже :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 18:30 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
авторНу а инвалидировать кэш по каждому insert-у скажите это сцуко MYSQL'ю. оно по каждому инсерту/апдейту кэш запросов (query cache) для учавствующих таблиц сбрасывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 18:33 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
softwarer, инвалидировать кэш по каждому инсерту никто не будет, но это и не требуется, кэшируемые статистики все равно достаточно грубы --- оценка доли значений, попавших в пробную выборку, примерный минимум, примерный максимум, грубая гистограмма, отдельно --- число нулей, единичек и NULL-ей, число значений, встретившихся в выборке ровно один раз, число значений, встретившихся в выборке ровно два раза, на этом, пожалуй, и всё. Оптимизатору заменить бы OR на UNION ALL, но раз уж NULL не индексируется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 18:37 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
iv_an_ruно это и не требуется, кэшируемые статистики все равно достаточно грубы Для реализации предложения Сергея - требуется. А грубость статистики зависит от того, когда и как она собиралась. iv_an_ruОптимизатору заменить бы OR на UNION ALL, В общем случае он такое делает, но в данном конкретном это не требуется и скорее вредно. Оракловый оптимизатор просто предполагает, что в тех редких случаях, когда подобный запрос имеет смысл, разработчик позаботится о его эффективном выполнении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 18:45 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
ScareCrowдык о Оракела null не индексируется. поэтому этотт запрос пойдет по индексу только с извратами.Люди добрые, это что - шутка была такая? Или про NULL - правда? Никакие NULL, даже которые пустые строки? :) Жесть какая-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 19:40 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
Favn, В Оракле пустая строка конвертится в NULL... И да, NULL не индексируется. Можно обойти костылём в виде функционального индекса по nvl(nullable, 'ThisIsNull'), и искать по нему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 19:51 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
Vinny the POOHFavn, В Оракле пустая строка конвертится в NULL... И да, NULL не индексируется. Можно обойти костылём в виде функционального индекса по nvl(nullable, 'ThisIsNull'), и искать по нему... Чиво???? и найти все строки, в которых реально ThisIsNull? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 20:26 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
softwarerДело в том, что строить план каждый раз, когда хочется выполнить запрос - довольно накладно. По этой причине у Оракла есть замечательная оптимизация: построенный план сохраняется в кэше и применяется для других, похожих запросов. Александр, полагаю, Вы в курсе, что такая же "замечательная оптимизация" есть и у MS SQL?! Ниже перечислены ситуации, которые приводят к инвалидации плана в кэше: -Changes made to a table or view referenced by the query (ALTER TABLE and ALTER VIEW). -Changes to any indexes used by the execution plan. -Updates on statistics used by the execution plan, generated either explicitly from a statement, such as UPDATE STATISTICS, or generated automatically. -Dropping an index used by the execution plan. -An explicit call to sp_recompile. -Large numbers of changes to keys (generated by INSERT or DELETE statements from other users that modify a table referenced by the query). -For tables with triggers, if the number of rows in the inserted or deleted tables grows significantly. -Executing a stored procedure using the WITH RECOMPILE option. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 22:35 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
Yo.!SergSuper например такой запрос Код: plaintext ну и с exists у оракла совсем плохо ну ? коню ясно что если оракл нулы не индексирует то оптимайзер свалится в фулскан. мне понадобиться секунд 30 чтоб наложить function-based index и получить тот же план, что и в мсскл. экзист, обычно мне хватает 15 секунд чтоб понять чего тупит, да и обычно SQL advisor сразу говорит чего подкрутить.да обычному человеку должно быть без разницы индексируются нулы или нет, есть запрос, а как он будет исполняться - придумывать function-based index, переделывать экзистсы - этим как раз и должен оптимизатор заниматься даже если и можно переделать - иногда запрос с exists выглядит наглядней и если его надо переписывать потому что так оптимизатор не поймет - ну всё таки это недостаток оптимизатора, как ни крути ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 23:37 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
pkarklinsoftwarerДело в том, что строить план каждый раз, когда хочется выполнить запрос - довольно накладно. По этой причине у Оракла есть замечательная оптимизация: построенный план сохраняется в кэше и применяется для других, похожих запросов. Александр, полагаю, Вы в курсе, что такая же "замечательная оптимизация" есть и у MS SQL?! Ниже перечислены ситуации, которые приводят к инвалидации плана в кэше: -Changes made to a table or view referenced by the query (ALTER TABLE and ALTER VIEW). -Changes to any indexes used by the execution plan. -Updates on statistics used by the execution plan, generated either explicitly from a statement, such as UPDATE STATISTICS, or generated automatically. -Dropping an index used by the execution plan. -An explicit call to sp_recompile. -Large numbers of changes to keys (generated by INSERT or DELETE statements from other users that modify a table referenced by the query). -For tables with triggers, if the number of rows in the inserted or deleted tables grows significantly. -Executing a stored procedure using the WITH RECOMPILE option.нет, здесь softwarer прав, вставка одной запись не вызовет инвалидации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 23:40 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
locky Чиво???? и найти все строки, в которых реально ThisIsNull? :) мусье придуривается или оканчивал лишь трехмесячные курсы по бухгалтерии и потому так плохо представляет как работает NVL() ? SergSuper да обычному человеку должно быть без разницы индексируются нулы или нет, есть запрос, а как он будет исполняться - придумывать function-based index, переделывать экзистсы - этим как раз и должен оптимизатор заниматься даже если и можно переделать - иногда запрос с exists выглядит наглядней и если его надо переписывать потому что так оптимизатор не поймет - ну всё таки это недостаток оптимизатора, как ни крути обычному человеку нужно прочитать концептс и после этого проблем как минимум с нулами не будет. а вот бредятины, не описанной в мсдн в мсскл имхо много больше. когда count(*) возвращает нечетное значение на RC когда в таблицу только четное кол-во записей пишется, когда RC транзакция читает эксклюзивно заблокированную запись (из индекса) нарываясь на дедлок, когда оптимизатор тупит на банальном запросе пытаясь распаралелить чтение пару блоков. экзист ниразу не приходилось переписывать, у меня в 100% решалось созданием индеса статистика которого вправляла мозг оптимизатору. еще раз, я вот показал элементарный запрос в мсскл где тупит оптимизатор, можете мне показать на столько же простой запрос в оракле, чтоб там так же тупил оптимизатор ? имхо оракловый мало того что много большему обучен и более сложно управляет статистикой, но и не тупит на столь элементарных запросах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2010, 23:57 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
softwareriv_an_ruОптимизатору заменить бы OR на UNION ALL, В общем случае он такое делает, но в данном конкретном это не требуется и скорее вредно. Оракловый оптимизатор просто предполагает, что в тех редких случаях, когда подобный запрос имеет смысл, разработчик позаботится о его эффективном выполнении. ну я с этим столкнулся когда надо было две однотипные базы объединить в одну если конкретно - банк работал каждым филиалом в своей базе, потом решил что база должна быть общая, сеть теперь позволяет какие-то данные уже были и их надо было корректно привязать т.е. если надо перенести клиента, то сначала он проверялся в базе приемнике по ФИО, дате рождения, адресу каких-то атрибутов могло не быть(например даты рождения) и приходилось сравнивать с нулом и эти проверки заняли основную часть времени, в итоге мы уложились в поставленные сроки, но с трудом т.е. да, задача была разовая, но с другой стороны намечается еще несколько таких банков и мне бы не помешал совет об эффективном выполнении метод с function-based index использовать не хотелось бы - всё таки порядка 2000 таблиц, да если еще несколько полей... в основном конечно таблицы мелкие, но сейчас все работает автоматом, разбираться по каждой таблице не хотелось бы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 00:07 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
Yo.! мусье придуривается или оканчивал лишь трехмесячные курсы по бухгалтерии и потому так плохо представляет как работает NVL() ? чо будет если написать NVL('ThisIsNull','ThisIsNull')? Результат - какой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 00:56 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
lockyYo.! мусье придуривается или оканчивал лишь трехмесячные курсы по бухгалтерии и потому так плохо представляет как работает NVL() ? чо будет если написать NVL('ThisIsNull','ThisIsNull')? Результат - какой? syntax error ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 00:59 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
Yo.!lockyYo.! мусье придуривается или оканчивал лишь трехмесячные курсы по бухгалтерии и потому так плохо представляет как работает NVL() ? чо будет если написать NVL('ThisIsNull','ThisIsNull')? Результат - какой? syntax error Мусьё придуривается или Как мусью ловко уходит от ответа, эта што-та! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 01:07 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
locky Мусьё придуривается или Как мусью ловко уходит от ответа, эта што-та! where nvl(field1||field1,'ThisIsNull') = 'ThisIsNull' на этом можно окончить с перфоменсом ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 01:17 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
Yo.!locky Мусьё придуривается или Как мусью ловко уходит от ответа, эта што-та! where nvl(field1||field1,'ThisIsNull') = 'ThisIsNull' на этом можно окончить с перфоменсом ? Вот за что мне всегда нравились ораклоиды - так это за то, как они изобретательно выпутываются из тех ситуаций, в которые другие прогеры просто не попадают. Строят функциональные индексы по двойной ширине колонки например, мудрят с "магическими значениями" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 01:41 |
|
||
|
Система ЭОД - неудача или успех ?
|
|||
|---|---|---|---|
|
#18+
Yo.!SQL Server 2005 introduces a new snapshot isolation level to enhance concurrency for OLTP applications . In earlier versions of SQL Server, concurrency was based solely on locking, which caused blocking and deadlocking problems for some applications. Snapshot isolation, by contrast, depends on enhancements to row versioning and is intended to improve performance by avoiding reader-writer blocking scenarios. ... This non-blocking behavior also significantly reduces the likelihood of deadlocks for complex transactions. http://msdn2.microsoft.com/en-us/library/tcbchxcb%28en-us,vs.80%29.aspx собственно добавить нечего, версионность увеличивает конкурентный доступ за счет более эффективного использования ресурсов. можно сказать уникальный случай когда Yo! согласен с майкрософт. а почему ссылка на msdn по Visual Studio-тo? Нормальные ссылки давать нужно, типа этой Enable read committed isolation using row versioning when: Reader/writer blocking occurs to the point that concurrency benefits outweigh increased overhead of creating and managing row versions. чем ближе система к чистой oltp (писателей больше, читателей меньше) тем меньше присутствует Reader/writer blocking и тем меньше здесь нужна версионность softwarer Ну да, OLTP - это такая write-only система. Плодит данные, которые никому не нужны.. В OLAP писатель ровно чаще всего один и называется ETL. Запускается он в большинстве случаев редко и ночью, благодаря чему никому особо не мешает.. Судя по тому, что в OLAP читателей "много", а в OLTP, видимо, "мало", подразумевается, что в OLAP-системах пользователей на порядки больше вам по сути та-же ссылка, что и Yo!, для ясности - чем меньше процент читателей, тем ненужнее версионность по очевидным причинам softwarer Сталкер, я понимаю, что Вы привыкли к тупой реализации версионности в MSSQL, но не нужно её неумеренно обобщать, показывая своё незнание. Оракл не плодит версий, вообще. хорошо, не плодит, просто пишет во всякие undo\redo (или как они у вас там называются) блоки. Давайте зайдем с другой стороны, представим на секунду, что Ораклу больше не надо иметь такую функциональность, как доступ к предыдущим версиям строк (т.е. представьте, что вам необходимо сделать оракл для pure writing environment с нулевым или крайне незначительным числом читателей). Можно-ли оптимизировать теперь архитектуру Оракл (и как) с учетом этого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 04:53 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=36848770&tid=1552498]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 403ms |

| 0 / 0 |
