Вопрос о базах и кеше.

User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Вопрос о базах и кеше.

Post by Dmitry67 »

ВОт и у меня вопрос возник по SQL serverу. Впрочем есть вопросик и для остальных

Имею две квери, A и B.
Кверь A выполняется первый раз 50sec, второй раз 5 sec
Кверь B выполняется 40sec, второй раз 10 sec
Понятно, работает кеш

При запуске их последовательно A,B выполняется 50sec.
Ага, кеша мало
Пытаюсь дать SQL serverу больше памяти
Скорость увеличивается но больше 1.7Gb расти не хочет
Хотя памяти на сервере значительно больше
Почему ?

Кстати, на DB2 и Oracle - они читают все мимо кеша операционной системы ?
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Кажется сам понял: надо включить AWE
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Re: Вопрос о базах и кеше.

Post by vc »

Dmitry67 wrote:Кстати, на DB2 и Oracle - они читают все мимо кеша операционной системы ?


It depends.

In Unix, one has to use either raw partitions or the 'forcedirectio' option (Solaris) when mounting a file system in order to avoid OS buffering.

In Windows, Oracle always bypasses the OS cache by using the FILE_FLAG_NO_BUFFERING/FILE_FLAG_WRITE_THROUGH options.

Rgds.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

А на Linux есть forcedirectio ?

Кстати любопытно
С AWE sql server в Task Manager выглядит совсем крошечным :)
То есть AWE память 'не считается'...
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
zVlad
Уже с Приветом
Posts: 15409
Joined: 30 Apr 2003 16:43

Re: Вопрос о базах и кеше.

Post by zVlad »

Dmitry67 wrote:ВОт и у меня вопрос возник по SQL serverу. Впрочем есть вопросик и для остальных
..........
Кстати, на DB2 и Oracle - они читают все мимо кеша операционной системы ?



Shortly saying DB2 reads pages from disks without using what you call “кеш операционной системы “ (which is actually not defined in MVS at all). Of course, DB2 has caches (called as Buffer Pools) to store pages in memory for better performance. For those BPs, DB2 co-operates with MVS very close. There are MVS’s Data Spaces (it could be considered as an analog of “кеш операционной системы “) and they could be used by DB2 for BPs (this is just one of few ways of how BPs could be implemented. With 64-bit addressing in place, ways of having BPs are totally reviewed. But all pervious cache related techniques are kept.)
In our shop we have few tables which are completely resided in CPU memory all time. It was made to meet response time requirements.

By the way, DB2 has a “cache” for dynamic SQL statements. That means when SQL comes in for first time, DB2 will compile it and store it in “dynamic SQL cache”. If the same SQL will come in again, DB2 will rather use already prepared and stored SQL than do it again.
Do Oracle and/or MS SQL have stuff like that?
User avatar
YellowMan
Уже с Приветом
Posts: 1099
Joined: 30 Sep 1999 09:01
Location: Bryansk,RUSSIA >> Dublin, Ireland

Post by YellowMan »

У меня сложилось впечатление что если выполнять более одного запроса последовательно сервер не использует кэш отдельно для каждого из запросов - можно бы проверить в Performance Manager.
Удачи@С.Смирнов
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: Вопрос о базах и кеше.

Post by Dmitry67 »

zVlad wrote: By the way, DB2 has a “cache” for dynamic SQL statements. That means when SQL comes in for first time, DB2 will compile it and store it in “dynamic SQL cache”. If the same SQL will come in again, DB2 will rather use already prepared and stored SQL than do it again.
Do Oracle and/or MS SQL have stuff like that?


Разумеется
Более того, если выполнять запросы типа
select ... where A=45 and B=66
select ... where A=233 and B=66
select ... where A=9 and B=66

то вскоре заметишь что MS SQL создал план запроса для
select ... where A=@p1 and B=66
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Post by vc »

Dmitry67 wrote:А на Linux есть forcedirectio ?

...


Last time I dealt with Oracle on Linux (about a year ago), there was no such option.

Rgds.
zVlad
Уже с Приветом
Posts: 15409
Joined: 30 Apr 2003 16:43

Post by zVlad »

Dmitry67, in DB2, it is the same, but queries:

'select c1 where A=? and B=?'

, and

'select c1 where A=? and B=? '

will be considered as two different queries.
verzlo
Уже с Приветом
Posts: 900
Joined: 20 Jul 2001 09:01

Post by verzlo »

Dmitry67 wrote:Кажется сам понял: надо включить AWE

Абсолютно верно ,включите AWE и дополнительно включите 3G switches.
По умолчанию в Виндах мах размер процесса в памяти не может превысить 2 Гб (включая виртальную память для него - поэтому реальной памяти вы видите тольк 1.7 Гб примерно). Если включить 3G switch - то
этот лимит увеличится до 3 Гб. При включении AWE - можно неограниченно увеличивать размер процесса в пределах свободной памяти, но тут есть ньюанс - буфера памяти будут маппится в "верхней" памяти > 4 Гб, а в обычной будут сохраняться пойнтеры наних.. Это немного увеличивает CPU overhead - в нашем случае на 15-20 % .
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

verzlo wrote:
Dmitry67 wrote:Кажется сам понял: надо включить AWE

Абсолютно верно ,включите AWE и дополнительно включите 3G switches.
По умолчанию в Виндах мах размер процесса в памяти не может превысить 2 Гб (включая виртальную память для него - поэтому реальной памяти вы видите тольк 1.7 Гб примерно). Если включить 3G switch - то
этот лимит увеличится до 3 Гб. При включении AWE - можно неограниченно увеличивать размер процесса в пределах свободной памяти, но тут есть ньюанс - буфера памяти будут маппится в "верхней" памяти > 4 Гб, а в обычной будут сохраняться пойнтеры наних.. Это немного увеличивает CPU overhead - в нашем случае на 15-20 % .


Да, спасибо
А вообще deja vu - помните XMS, EMM386, оптимизация QEMM386 :)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
lozzy
Уже с Приветом
Posts: 2435
Joined: 12 Jun 2001 09:01

Post by lozzy »

Dmitry67 wrote:Да, спасибо
А вообще deja vu - помните XMS, EMM386, оптимизация QEMM386 :)


64 бита не за горами ;)
Steel helmet protects your teeth from the morning to the evening.
hren
Уже с Приветом
Posts: 507
Joined: 15 May 2002 13:30
Location: Moscow, Russia

Post by hren »

vc wrote:Last time I dealt with Oracle on Linux (about a year ago), there was no such option.
Direct io для файловых систем поддерживается на уровне ядра в Linux RH Enterprise Linux AS (бывший Red Hat Linux Advanced Server). Возможно и где-то еще. В принципе, он доступен для файловых систем xfs (точно) и, возможно, ext3 (не уверен).

В большинстве случаев использование direct io в Oracle актуально для OLTP приложений, с высоким уровнем io, при большом размере блочных буферов СУБД, особенно при использовании высокоскоростных внешних дисковых массивов со своим большим кэшем и большой пропускной способностью контроллера. Может заметно уменьшить нагрузку на процессоры сервера.
hren
Уже с Приветом
Posts: 507
Joined: 15 May 2002 13:30
Location: Moscow, Russia

Re: Вопрос о базах и кеше.

Post by hren »

zVlad wrote: By the way, DB2 has a “cache” for dynamic SQL statements. That means when SQL comes in for first time, DB2 will compile it and store it in “dynamic SQL cache”. If the same SQL will come in again, DB2 will rather use already prepared and stored SQL than do it again.
Do Oracle and/or MS SQL have stuff like that?
Oracle имеет очень развитую систему кэширования запросов. Кэшируются курсоры на уровне сессии, кэшируются запросы (несколькими способами) в общих областях памяти. Это механизм настраивается большим количеством параметров и работает весьма эффективно, если у приложения достаточно велик коэффициент переиспользования запросов. В противном случае contention в областях буферизации запросов приводит иногда к необходимости уменьшать их размер.
zVlad
Уже с Приветом
Posts: 15409
Joined: 30 Apr 2003 16:43

Re: Вопрос о базах и кеше.

Post by zVlad »

hren wrote:
zVlad wrote: By the way, DB2 has a “cache” for dynamic SQL statements. That means when SQL comes in for first time, DB2 will compile it and store it in “dynamic SQL cache”. If the same SQL will come in again, DB2 will rather use already prepared and stored SQL than do it again.
Do Oracle and/or MS SQL have stuff like that?
Oracle имеет очень развитую систему кэширования запросов. Кэшируются курсоры на уровне сессии, кэшируются запросы (несколькими способами) в общих областях памяти. Это механизм настраивается большим количеством параметров и работает весьма эффективно, если у приложения достаточно велик коэффициент переиспользования запросов. В противном случае contention в областях буферизации запросов приводит иногда к необходимости уменьшать их размер.


In DB2 I could find just three parameters to control Dyn SQL Cache, one of them is optional - Data Space Size (if you wish Data Space for Dyn Cache), Second one is to say if you really wish to use Dyn Cache (YES, or NO), and last one to limit number of dyn stmts be kept past commit point for each single application.
I have never heard about contentions related to usage of Dyn SQL Cache. :pain1: :gen1:

Return to “Вопросы и новости IT”