Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 8 9 10 11 12 [13] 14 15 16 17 .. 26   вперед  Ctrl
 Re: Провал операции Yukon  [new]
Scott Tiger
Member

Откуда: вмваре
Сообщений: 6904
Glory
О как ! Теперь выясняется что оп.система отвечает за количество обрабатываемых sql-ем транзакций. Так мы скоро дойдем до BIOS-ов дисковых контроллеров.


Разумеется. Ожидания I/O весомо влияют на производительность любого I/O-ёмкого приложения, и СУБД - чуть ли не первые в этом списке.

Glory
Это за него может проделать и сам sql сервер. Например при тех же самых Merge/Hash join-ах. Получается вопрос состоит в доступности механизма онлайновых временных таблиц разработчику. Который сильно смахивает на утверждение что оптимизатор Oracle лучше поскольку предоставляет разработчику большее число хинтов.


В чём смысл временных таблиц? Их смысл - хранить наборы данных, которые в рамках одной, например, процедуры необходимо многократно обновлять, удалять и т.п. в случаях, когда "одним селектом" это делать невыгодно из соображений ресурсоёмкости или излишней сложности кода, или же невозможно. Очевидно, что такие ситуации встречаются, хотя и не часто.
20 май 04, 16:22    [690934]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Gt.
Guest
автор
Ну вот, я буквально спас Drema от перехода Gt. на личности


неа, не спас :) но он смело может воспринимать на свой счет все что было до этого адресовано Леониду :)

автор
когда оправдано применение DDL в ХП


верится с трудом, ddl вызывает завершение транзакции, поэтому юзать низя даже если положить на время.

так в mssql можно создавать тригеры, индексы, view на временные таблицы ?
20 май 04, 16:25    [690949]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Karpol
Member

Откуда:
Сообщений: 92
автор

Да причём тут особенности реализации. Временное ТП создаётся один раз при создании базы. И всё! Это первое. И второе - вы даже не знаете. зачем оно нужно. А берётесь судить о терминах.

Ну зачем было мешать сюда временное табличное пространство. Ведь понятно, что это сделано просто для красного словца. Оно одно в базе и не представляет собой ничего уникального, чтобы его каждый раз создавать как-то поразному. А временных таблиц может быть очень много. Столько же много сколько бывает различных SQL-запросов, которые программисту понадобилось временно сохранить.

PS: И еще, если кто-нибудь приведет толковый код, как описать процедуру в Oracle, чтобы она возвращала курсор, буду очень благодарен. То есть хочу в процедуре Oracle выполнить select, данные которого вернуться в Query при вызове этой процедуры
То есть типа:
begin
my_proc(:cur);
end;

Интересует пример процедуры и что написать в Query.
Для MS SQL это делается на ура, а в Оракле или как-то мудро или никак
20 май 04, 16:30    [690968]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Glory
Member

Откуда:
Сообщений: 104751
2Scott Tiger
Разумеется. Ожидания I/O весомо влияют на производительность любого I/O-ёмкого приложения, и СУБД - чуть ли не первые в этом списке.
Поэтому например Standart и Enterprise версии MSSQL и не устанавливаются на НЕсерверные версии Windows. Стандартный инсталятор об этом так и заявляет.

В чём смысл временных таблиц? Их смысл - хранить наборы данных, которые в рамках одной, например, процедуры необходимо многократно обновлять, удалять и т.п. в случаях, когда "одним селектом" это делать невыгодно из соображений ресурсоёмкости или излишней сложности кода, или же невозможно. Очевидно, что такие ситуации встречаются, хотя и не часто.

Ну так я и сравнил возможность работы с временными таблицами в MSSQL с тем же большим количеством хинтов оптимизатора Oracle. С помощью таких таблиц я например могу совершенно четко определить порядок выполнения запроса. Т.е. вопрос в удобстве.
20 май 04, 16:34    [690990]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
eNose
Member

Откуда:
Сообщений: 183063
Поэтому например Standart и Enterprise версии MSSQL и не устанавливаются на НЕсерверные версии Windows. Стандартный инсталятор об этом так и заявляет.

Glory, не обманывай людей :-)



eNose
20 май 04, 16:39    [691011]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Glory
Member

Откуда:
Сообщений: 104751
Glory, не обманывай людей

В смысле ?
20 май 04, 16:41    [691016]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
eNose
Member

Откуда:
Сообщений: 183063
В том смысле, что УСТАНАВЛИВАЕТСЯ. NTSwitch.



eNose
20 май 04, 16:42    [691022]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
eNose
Member

Откуда:
Сообщений: 183063
Это обычное коммерческое ограничение.


eNose
20 май 04, 16:43    [691026]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Drema
Member

Откуда: Москва
Сообщений: 249
автор
Да причём тут особенности реализации. Временное ТП создаётся один раз при создании базы. И всё! Это первое. И второе - вы даже не знаете. зачем оно нужно. А берётесь судить о терминах.


Вы сами вспомнили этот термин и сами его и обсуждаете, я же его не касаюсь, потому как мне по большому счету все равно как реализован механизм "временности" на том или ином сервере.

автор
ну не бывает приложений на Oracle с тысячами временных таблиц. Для работы с небольшими объёмами данных обычно используют вложенные селекты, курсоры и т.п. Для хранения наборов переменных внутри процедуры можно использовать, например, записи (records)


Вложенные селекты - это прекрасно, а теперь представьте, что в нескольких местах нужно использовать один и тот-же селект.. и таких мест - куча. Ну не обойтись здесь простыми переменными - очень удобно применять временные таблицы (правильно было написано - двумерный массив и обращением как к таблице).
Курсоры стараюсь вообще не применять, только в исключительных случаях... еще мне Clipperа не хватало на стороне сервера.
20 май 04, 16:44    [691034]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Gt.
Guest
2Karpol
PROCEDURE myproc (mycurs out sys_refcursor)
begin
open mycurs for
select ....
end ;
20 май 04, 16:46    [691044]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
eNose
Member

Откуда:
Сообщений: 183063
Ну не обойтись здесь простыми переменными

Вот, наконец-то.
А если не "простыми"?
А, например, переменными пакета?


eNose
20 май 04, 16:46    [691045]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Leonid
Member [заблокирован]

Откуда: From nowhere
Сообщений: 743
Gt
неа, не спас :) но он смело может воспринимать на свой счет все что было до этого адресовано Леониду :)

Продолжайте список, уважаемый Gt, включая в него всех кто указывал вам на ваши глупости, из за тотального незнания "противоположного лагеря": Merli, Leonid, возможно Drema, ...
И переходите сразу с ними на личности, нечего церемонится. Глядишь,и запугаете всех
20 май 04, 16:50    [691061]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Borland
Member

Откуда: $HOME
Сообщений: 15839
2 Scott Tiger : В явном виде - нет. Тем паче что GTT на лету нет смысла создавать.

Но это не карается а иногда полезно

-----
Все великие дела совершаются в командной строке
20 май 04, 16:50    [691062]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Leonid
Member [заблокирован]

Откуда: From nowhere
Сообщений: 743
Drema
Курсоры стараюсь вообще не применять, только в исключительных случаях... еще мне Clipperа не хватало на стороне сервера.
Иногда без курсоров не обойтись как не изворачивайся :(
Вообще, в плане курсоров с Ораклом полегче, а в MS их лучше избегать.
Но именно вот это и заставляет думать и подчас решать одним выражением, то что можно решить через курсор.
В случае же одного выражения, это в любом случае (что на oracle/что на mssql) будет быстрее.
Это не "минус" Ораклу, скорее "плюс", но "плюс" расслабляющий.
20 май 04, 17:15    [691163]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Scott Tiger
Member

Откуда: вмваре
Сообщений: 6904
http://asktom.oracle.com/pls/ask/f?p=4950:8:8234924440985007048::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:581823165800,

...
Mostly yes you can but no you should not. (you'll be responsible for dropping
the table).

If you know the structure of the table at compile time -- It will be 100%
easier, better, and more efficient to use the global temporary table. They are
the correct approach in Oracle.

If you want to have a "table per person", it'll cost you (DDL is not cheap) and
it'll be messy.
...
Again -- try not to do this. It is simply not the correct approach in
Oracle.
...
"DO NOT dynamically create them, DO NOT dynamically create
them, please -- do NOT dynamically create them."
...
20 май 04, 17:19    [691181]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Drema
Member

Откуда: Москва
Сообщений: 249
автор
Ну не обойтись здесь простыми переменными
Вот, наконец-то.
А если не "простыми"?
А, например, переменными пакета?


Не простыми а золотыми :) Насколько я понимаю, это касается области видимости переменных.. временные таблицы наоборот самое что ни на есть локальное существо..

К примеру (может мы говорим о разных вещах, #t - это временная таблица, это код полностью работающий, ничего дополнительного делать не надо):

SELECT *
INTO #t
FROM ttt WHERE ...

SELECT (SELECT TOP 1 P
FROM mmm WHERE kk1 IN (SELECT pp FROM #t)
) as P1,
(SELECT TOP 1 P
FROM mmm WHERE kk2 IN (SELECT pp FROM #t)
) as P2,
..

(совершенно абстрактный пример)
20 май 04, 17:27    [691206]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Borland
Member

Откуда: $HOME
Сообщений: 15839
2 Scott Tiger : Ошибался...признаю

-----
Все великие дела совершаются в командной строке
20 май 04, 17:27    [691208]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Glory
Member

Откуда:
Сообщений: 104751
В том смысле, что УСТАНАВЛИВАЕТСЯ. NTSwitch.
Ну не запись же в реестре делает из Win2000Pro Win2000Server а из SQL2000 Standart - SQL2000 Enterprise.
20 май 04, 17:41    [691250]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
dmitrysk
Member

Откуда:
Сообщений: 460
автор
SELECT *
INTO #t
FROM ttt WHERE ...

SELECT (SELECT TOP 1 P
FROM mmm WHERE kk1 IN (SELECT pp FROM #t)
) as P1,
(SELECT TOP 1 P
FROM mmm WHERE kk2 IN (SELECT pp FROM #t)
) as P2,
..


В Oracle без проблем это все можно сделать одним запросом. И только не надо говорить что десять раз нужно писать подзапросы, для select есть выражение with. В итоге имеем что MS парсит несколько запросов, Oracle один, а это все время выполнения. Так что применение временной таблицы в данном примере не показатель их необходимости.
20 май 04, 18:01    [691321]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Scott Tiger
Member

Откуда: вмваре
Сообщений: 6904
Библиотеки ввода-вывода, думаю, совершенно идентичны во всех редакциях винды одной версии. Oracle, например, ставится и работает совершенно одинаково и на Workstation и на (Advanced/Enterprise) Server.
20 май 04, 18:01    [691322]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Drema
Member

Откуда: Москва
Сообщений: 249
автор
В Oracle без проблем это все можно сделать одним запросом. И только не надо говорить что десять раз нужно писать подзапросы, для select есть выражение with. В итоге имеем что MS парсит несколько запросов, Oracle один, а это все время выполнения. Так что применение временной таблицы в данном примере не показатель их необходимости.


Для особо одаренных я написал, что это абстрактный пример, исключительно для того, чтобы показать синтаксис, а не надобность.
20 май 04, 18:15    [691381]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Glory
Member

Откуда:
Сообщений: 104751
2dmitrysk
В итоге имеем что MS парсит несколько запросов, Oracle один, а это все время выполнения
Только если при выполнении Oracle-ом запроса
SELECT (SELECT TOP 1 P
FROM mmm WHERE kk1 IN (SELECT * FROM ttt WHERE ...)
) as P1,
(SELECT TOP 1 P
FROM mmm WHERE kk2 IN (SELECT * FROM ttt WHERE ...)
) as P2,
..
результат (SELECT * FROM ttt WHERE ...) будет помещен в какую-то внутренюю промежуточную структуру а-ля таблица то в итоге получим такое же время выполнения.
А вот если же Oracle будет каждый раз выполнять (SELECT * FROM ttt WHERE ...), то в этом случае я боюсь время выполнения запроса будет сильно различаться
20 май 04, 18:22    [691409]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32168
2dmitrysk
автор
В итоге имеем что MS парсит несколько запросов, Oracle один

Вообще в MS принято писать процедуры, и парсятся они в момент первого выполнения. А в остальном принципиально всё одинаково.
Кроме того, можно делать и подзапросы. Просто Drema пишет о самой возможности.

2Scott Tiger
Насчёт библиотек ввода-вывода - MSSQL использует ввод-вывод на довольно низком уровне - обращается к драйверу логического диска за нужными секторами, без использования файловой системы. В принципе, больших накладных расходов быть не должно. Ну и если использовать машину только под SQL-сервер, то винды и в остальном мешать не будут - SQL-сервер-у ведь ничего больше особенно и не надо.
20 май 04, 18:32    [691447]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
2 dmitrysk
Ну вот пример из реальной процедуры для составления какого-то отчета
  insert #p
    select t.paper,0,s,0,0,0,0,0,@date
      from #ad t, AccState s
      where s.fond=@fond and t.acc=s.acc and sub like '58.%'
        and date=d

  update #p
    set a59=s
    from #ad t, AccState s, #p b
    where s.fond=@fond and t.acc=s.acc and  sub like '59.[1234]%'
      and date=d
      and b.paper=t.paper and s.bln='M'

  update #p
    set a765=s
    from #ad t, AccState s, #p b
    where s.fond=@fond and t.acc=s.acc and  sub = '76.5'
      and date=d
      and b.paper=t.paper and s.bln='M'

  update #p
    set a595=s
    from #ad t, AccState s, #p b
    where s.fond=@fond and t.acc=s.acc and  sub = '59.5'
      and date=d
      and b.paper=t.paper and s.bln='M'

  update #p
    set deadline=coalesce(date_to,@date)
    from #p p, Papers pp
    where p.paper=pp.paper

  update #p
    set quot = equote
    from #p p, Quotation q1
    where p.paper=q1.paper and q1.date=@last and q1.qt<>0

  select p.paper, max(date) d
    into #pdn
    from #p p, Quotation q2
    where q2.paper=p.paper and q2.date<@date
      and q2.cupquote is not null and q2.cupquote>0
    group by p.paper

  update #p
    set qnkd = coalesce(cupquote,0)
    from #p p, #pdn d, Quotation q1
    where p.paper=q1.paper and p.paper=d.paper
      and q1.date=d.d

Далее данные из #p как-то используются при выводе данных.

Не самый лучший пример для подражания, но всё же.
Здесь каждое поле временной таблицы поочерёдно заполняется относительно сложным образом. В принципе наверное это можно было бы написать одним запросом используя выражение with (в чем я не уверен). Но в чем я уверен - мы получили бы такое жуткое нагромождение, такую жуткую вложенность что разобраться было бы весьма непросто. А так мы свели дело к множеству простеньких понятных запросов.

И это - я не собираюсь ни с кем спорить, просто хочу объяснить что такое временные таблицы и как их можно использовать.
20 май 04, 18:50    [691512]     Ответить | Цитировать Сообщить модератору
 Re: Провал операции Yukon  [new]
Scott Tiger
Member

Откуда: вмваре
Сообщений: 6904
Реализация и соответствующия API ввода-вывода в Windows существуют безотносительно файловой системы. Конкуренция будет, скорее, за физические устройства, чем за ресурсы ОС, необходимые для функционирования I/O.
20 май 04, 18:51    [691515]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 8 9 10 11 12 [13] 14 15 16 17 .. 26   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить