LINUX.ORG.RU
ФорумAdmin

Оптимальные record size для базы данных oracle (ext4, zfs)

 , , , ,


0

2

Товарищи, тут одна из баз данных, не особо сильно нагруженная (на мой взгляд), не прилично много читает.

Анамнез:

Запускаем на гипервизоре, на часок, вот такое:

iotop -obPat

Получаем цифру, что вся вирт. машина за час прочитала 300 гигов… У меня б… , база 150гб весит…

Схема работы всего хозяйства:

  • zvol - 8k (8 килобайт) ++++ Включено сжатие! (в этом режиме, zfs, вроде как может делать переменным размер блока)
  • FS - 4096 (4 килобайта)
  • ORA - 8192 (8 килобайт)

Разделы выровнены (по идее…).

Что может быть не так в моей схеме (что приводит к такому гигантскому чтению), или, в целом, всё адекватно? У меня пользователи строили отчеты в это время.

Так же, подозреваю, что, вероятно, нужно больше ОЗУ для кешей (Oracle), тогда кол-во чтения, заметно упадет…

★★★★★

Ответ на: комментарий от anonymous

Использую SSD в первом RAID (тройном, силами zfs).

У oracle SGA и buffer cache размер какой?

Пока не готов сказать, сто лет не влезал в эти дебри. Моя проблема сильно похожа на нехватку ОЗУ для Oracle, банально?

DALDON ★★★★★ ()
Ответ на: комментарий от anonymous

На ZFS ARC размер какой? Крохи. Всего 5 гб.

zfs get all pool/ORA - какие параметры выставлены? У ZFS noprefetch=1 ?

Всё по дефолту. Абсолютно всё. Я не парился тюнингом, так-как предполагал, что нагрузка на мою oracle, смешна… А тут холодный душ, что называется…

DALDON ★★★★★ ()
Ответ на: комментарий от DALDON

На ZFS
secondarycache=none
atime=off
redundant_metadata=most
xattr=sa\

Выключить prefetch, посмотреть как arc используется
arcstat 1
Если есть SSD - добавить ZIL и L2ARC.
Дык - у oracle SGA и buffer cache какие?

anonymous ()
Ответ на: комментарий от anonymous

В качестве помощи тупому учащемуся, подскажите как правильно интерпретировать вывод простыни? (тестовая база)

SQL> select 1- (sum(decode(name, 'physical reads',value,0))/(sum(decode(name, 'db block gets',value,0))+(sum(decode(name, 'consistent ge
ts',value,0))))) "Read Hit Ratio" from v$sysstat;

Read Hit Ratio
--------------
    .915231391

91 процент попадания в кеш, или что?

DALDON ★★★★★ ()
Последнее исправление: DALDON (всего исправлений: 1)
Ответ на: комментарий от DALDON

ну в общем - да
отношение числа обращений к диску/число обращений к buffer cache
Т е в вашем случае 91% запрашиваемых данных из таблиц в кэше oracle
Но в вашем случае нужно смотреть запросы отчетов и как они используют temp и undo.
Т к ФС CoW и кэш ARC - это для чтения, то например, при малом
размере PGA будет скорее всего использоваться temp для соединения таблиц,
и как результатданные будут писаться на диски и потом подниматься в кэш ARC
и далее в buffer cache. Вот вам и чтение.

anonymous ()
Ответ на: комментарий от anonymous

Твою мать, у меня на проде этот процент: 46%… Я достоин гранта провал года?

P.S. померил iostat внутри и снаружи виртуалки - данные совпали. Следовательно, не должно быть косяков в размере блоков?

DALDON ★★★★★ ()
Ответ на: комментарий от anonymous

Но в общем случае попадание в кэш должно быть больше 90%. Так и не получил ответа о размере SGA и buffer cache oracle

Я пока пытаюсь понять как их посмотреть… Я не помню, уже… Стыдно, но факт. Как-то в профайлах бинарных смотреть, наверно?

А вот ещё с продуктива:

free -m
             total       used       free     shared    buffers     cached
Mem:         20080      18561       1519      13008        264      13706
-/+ buffers/cache:       4590      15490
Swap:        26623        181      26442

То есть, я 13 гиг, тупо оставил под ОС… Я тюнил процессы апликационные, не вникая глубоко в СУБД.

Премия провал года - моя?

DALDON ★★★★★ ()
Последнее исправление: DALDON (всего исправлений: 1)
Ответ на: комментарий от anonymous
SQL> show sga;

Total System Global Area 4643385344 bytes
Fixed Size    2260888 bytes
Variable Size 2332033128 bytes
Database Buffers 2298478592 bytes
Redo Buffers   10612736 bytes

Я так понимаю, сейчас у меня всего 4гб. Это провал, парни.

DALDON ★★★★★ ()
Последнее исправление: DALDON (всего исправлений: 1)
Ответ на: комментарий от anonymous

Потюнил на тесте, после пары прогонов отчетов не особо сложных, получил:

SQL> select 1- (sum(decode(name, 'physical reads',value,0))/(sum(decode(name, 'db block gets',value,0))+(sum(decode(name, 'consistent ge
ts',value,0))))) "Read Hit Ratio" from v$sysstat;  2  

Read Hit Ratio
--------------
    -3.6503489

Было: -.9xxx Стало: -3.6503489

Что это значит, не понимаю… :( Три процента может всего? А было менее одного??

DALDON ★★★★★ ()
Ответ на: комментарий от DALDON

Походу дела, всё очень печально?

SQL> select SUM(decode(Name, 'consistent gets', Value, 0)) "Consisten Gets", SUM(decode(Name, 'db block gets', Value, 0)) "DB Block Gets
", SUM(decode(Name, 'physical reads', Value, 0)) "Physical Reads" from v$sysstat;

Consisten Gets DB Block Gets Physical Reads
-------------- ------------- --------------
       2363597      114463     464158
DALDON ★★★★★ ()
Ответ на: комментарий от anonymous

Могу наврать, но если мне не изменяет память- то в среде
виртуализации нужно пробрасывать raw диски в виртуалку для ASM.
Не всегда это удобно, например, проблемы с миграцией виртуалки

anonymous ()
Ответ на: комментарий от anonymous

Все верно.

Чет я натюнил через Жёпу, парни. Почему кеш в операционке то такой здоровый б…?

Всей виртуалке дал 30гб. На самой машине крутится апликация плюс СУБД.

И так:

  • VM 30 ГБ
  • show parameter sga_max_size - текущий размер 24gb
  • show parameter db_cache_size - текущий размер 20gb
free -g
             total       used       free     shared    buffers     cached
Mem:            29         29          0         25          0         25
-/+ buffers/cache:          2         26

Нихера не всасываю, cached 29. Что это за порнография? У меня точно не должно быть всего заюзано 2 гига… Что за нах..?!

Спасибо всем анонимам за помощь.

DALDON ★★★★★ ()
Ответ на: комментарий от anonymous

Давайте пока забудем про zfs. Это уровнем ниже, и сейчас я не рассматриваю этот слой. Я смотрю только процессы внутри Oracle VM!

У меня всё свободно!

oracle - shared mem 24G и судя по всему интерпретируется как cached

То есть, oracle, понимает на какой ОС он работает, и всё это светится на уровне ОС? Да бред, же… Разве нет? Я бы согласился с Вами, но у меня по-прежнему, процент попадания в кеш, как был на уровне 1-2%, так и остался…

ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00004dc4 65536      sapadm     760        40141728   1                       
0x000027bd 196609     prdadm     740        60000000   1                       
0x00004dbe 131074     root       777        630094     1                       
0x00000000 229379     root       600        393216     2          dest         
0x00000000 262148     root       600        393216     2          dest         
0x00000000 294917     root       600        393216     2          dest         
0x00000000 327686     root       600        393216     2          dest         
0x00000000 360455     root       600        393216     2          dest         
0x00000000 393224     root       600        393216     2          dest         
0x00000000 425993     root       600        393216     2          dest         
0x00000000 458762     root       600        393216     2          dest         
0x00000000 491531     root       600        393216     2          dest         
0x00000000 557068     oraprd     640        134217728  57                      
0x00000000 589837     oraprd     640        25635586048 57                      
0x295cad9c 622606     oraprd     640        2097152    57                      
0x00000000 655375     prdadm     740        1024       1                       
0x0382be85 688144     prdadm     640        4096       2                       
0x00002796 720913     prdadm     740        65536000   1                       
0x00000000 753682     prdadm     740        1024       1                       
0x0382be84 786451     prdadm     640        4096       28                      
0x00002749 819220     prdadm     740        1679552    27                      
0x0000271a 4227093    prdadm     740        200000000  28                      
0x00002711 4259862    prdadm     740        592        29                      
0x00002712 4292631    prdadm     740        7291352    29                      
0x00002713 4325400    prdadm     740        66864000   29                      
0x00002744 4358169    prdadm     740        179368     29                      
0x0000272f 4390938    prdadm     740        6387876    29                      
0x00002743 4423707    prdadm     740        18284132   26                      
0x0000274e 4489244    prdadm     740        86484792   27                      
0x00002759 4522013    prdadm     740        60211232   29                      
0x0000274f 11304990   prdadm     740        86040      1                       
0x00002719 11337759   prdadm     740        268435456  26                      
0x00002718 11370528   prdadm     740        268435456  26                      
0x00002722 11403297   prdadm     740        6132128    26                      
0x00002738 11436066   prdadm     740        646000000  26                      
0x00002717 11468835   prdadm     740        31072      26                      
0x00002714 11534372   prdadm     740        584184     26                      
0x00002739 11567141   prdadm     740        42588712   26                      
0x00002723 11599910   prdadm     740        100080448  26                      
0x00002731 11632679   prdadm     740        30719496   26                      
0x00002746 11665448   prdadm     740        83886200   26                      
0x00002751 11698217   prdadm     740        4194264    26                      
0x00002750 11730986   prdadm     740        4194520    26                      
0x00002761 11763755   prdadm     740        20672      23                      
0x00002716 12451884   prdadm     740        1843200000 16947                   
0x0000272e 12484653   prdadm     740        56138      26                      
0x0000274a 12517422   prdadm     740        2076       26                      
0x00002748 12681263   prdadm     740        535000     21   

Huge page, вроде выклю чены.

Может быть дело в: SHMMAX и прочими параметрами? Я не шарю, танк, горит, парни… :(

DALDON ★★★★★ ()
Ответ на: комментарий от DALDON

Сформулируйте вопрос, что вы хотите
уменьшить iops - тюньте ZFS, а еще лучше - перенесите БД на ext4
настроить oracle - смотрите параметры oracle и профили запросов, ждите когда кэш oracle разогреется\

У вас с такими настройкам велика вероятность, что вся память будет\ съедена, oracle залезет в swap и придет oom killer

anonymous ()
Ответ на: комментарий от anonymous

У вас с такими настройкам велика вероятность, что вся память будет\ съедена, oracle залезет в swap и придет oom killer

У меня вся память свободна! oracle её не забирает вообще! Падла эта! Всё в кеше операционки сидит… :( В этом то и вопрос. Оракл не забирает, всё в кеше, зато падла эта, каждый блок хочет с диска прочитать.

DALDON ★★★★★ ()
Ответ на: комментарий от anonymous

Ну и - oracle отмапил 25 гиг памяти, free это тебе и показывает(shared) и считает это как cached.

Пруф, можно? У меня как считывало 98% процентов с диска, до тюнинга, так и продолжает считывать. Вы, реально хотите сказать, что free показывает shared как занято и считает это как cached? У меня есть приложения на java, там такого нет. У меня cached - пуст.

Вопрос то в чем не понятно - кэш оракла не разогрет?

Чем больше у меня разогревается кеш оракла, тем хуже мои показатели… Правильно я понимаю вывод команды, ведь? Всё крайне печально?

SQL> select SUM(decode(Name, 'db block gets', Value, 0)) "DB Block Gets", SUM(decode(Name, 'physical reads', Value, 0)) "Physical Reads"
 from v$sysstat;  2  

DB Block Gets Physical Reads
------------- --------------
      3368102   119522626
DALDON ★★★★★ ()
Ответ на: комментарий от DALDON

У меня вся память свободна! oracle её не забирает вообще! Падла эта!

Он у тебя отмапил 25 гиг и сказал - это мое.
Линух сказал - ок, а оракле сидит и не заполняет свой кэш, т к считает и так хорошо- типа читать с диска напрямую быстрее, чем кэшировать и читать.
В oracle awr что покаывает?

anonymous ()
Ответ на: комментарий от anonymous

В oracle awr что покаывает?

Пож-та, подскажите какая команда будет адекватна для вывода именно по чтению с диска посмотреть стату?

SELECT TO_CHAR(BEGIN_INTERVAL_TIME,'hh24') SNAP_TIME , AVG(VALUE) AVG_VALUE FROM DBA_HIST_SYSSTAT  NATURAL JOIN DBA_HIST_SNAPSHOT 
 WHERE STAT_NAME = 'physical reads'  GROUP BY TO_CHAR(BEGIN_INTERVAL_TIME,'hh24')  ORDER BY TO_CHAR(BEGIN_INTERVAL_TIME,'hh24');

Первая, найденная в гугле команда. Адекватно? Я так понимаю, оно показывает среднее значение чтоль по всем снапшотам…

А теперь Бинго! Я доколупался до знакомого, у которого oracle, точно так же как и у меня весь сидит в cached! При выводе free -g…

Я хочу в окно выйти уже с этим Ораклом.

DALDON ★★★★★ ()
Ответ на: комментарий от anonymous

zfs у меня уровнем пониже. К моему вопросу сейчас не имеет отношения. Речь уже не о дисковой производительности :) А о кол-ве чтения процессами oracle :)

DALDON ★★★★★ ()
Ответ на: комментарий от anonymous

Я вроде выкладывал. Как бы распарсить сей вывод?

Там есть нечто, под названием:

0x00000000 589837     oracle 640        25635586048 55

Это типа процесс моего оракла, который всё честно «скушал», а я тут устроил панику и уже обкакался весь?

DALDON ★★★★★ ()
Ответ на: комментарий от anonymous

При ZFS еще как имеет

Да не, я ж внутри самой виртуалки, смотрю как много у меня oracle читает… Через iostat, банально. Под виртуалкой - хоть дискета. Разве нет? :)

DALDON ★★★★★ ()
Ответ на: комментарий от DALDON

Раньше я спрашивал про atime,primaricache,secondarycache - ни ответа, ни привета
Читайте про тюнинг ZFS. С чего вы взяли, что это oracle читает, а не ZFS?
Посмотрите хотя бы через
iotop или pidstat -dl 1

anonymous ()
Ответ на: комментарий от anonymous

25635586048 Вот эти байты на мысль никакую не наводят?

Наводят… Я просто до сих пор, не могу понять, как процесс oracle, может скидывать свой кеш, тупо в кеш операционки..?! Вот как, Карл..?!

DALDON ★★★★★ ()
Ответ на: комментарий от anonymous

Раньше я спрашивал про atime,primaricache,secondarycache - ни ответа, ни привета

Смотрите, zfs находится на самом хосте (гипервизоре), и помимо этой вирт. машины, там ещё ряд других.

Сейчас посмотрю чего по zfs, но пока, вроде не жалуюсь на производительность.

Читайте про тюнинг ZFS. С чего вы взяли, что это oracle читает, а не ZFS?

А очень всё просто: берем iotop запускаем на гипервизоре и такой же iotop запускаем внутри VM. Потом одновременно их останавливаем и считаем показания. Если разницы нет - стало быть, zfs не при делах. :) В чем-то я не прав, в своей методике измерений?

Посмотрите хотя бы через iotop или pidstat -dl 1

Про pidstat, не слышал, сейчас повкуриваю. :)

DALDON ★★★★★ ()
Ответ на: комментарий от DALDON

По zfs, отвечаю:

zfs get primarycache tank
NAME  PROPERTY      VALUE         SOURCE
tank  primarycache  all           default
zfs get secondarycache tank
NAME  PROPERTY        VALUE           SOURCE
tank  secondarycache  all             default
zfs get redundant_metadata tank
NAME  PROPERTY            VALUE      SOURCE
tank  redundant_metadata  all        default

secondarycache=none atime=off redundant_metadata=most xattr=sa\

Выключить prefetch, посмотреть как arc используется arcstat 1

На боевом пока не готов сходу всё применять. У меня на боевом SSD юзаются. Нужно вкуривать что даёт каждая команда! Спасибо! atime=off - при создании пула делал. Всё остальное, не трогал!

DALDON ★★★★★ ()