Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5   вперед  Ctrl      все
 Re: Как ускорить сортировки?  [new]
Vladimirgs
Member

Откуда: Казань
Сообщений: 694
to Oracle X-pert

Выдержка из Оракл Тюнинг: "Строка системной статистики DBWR buffers scanned (число буферов просмотренных процессом DBWR) является превосходным показателем объема информации прошедшего через процесс записи в базу данных. В строках DBWR checkpoint ... отображается количество выполняемых контрольных точек. Процесс DBWR осуществляет все операции чтения и записи файлов базы данных (процесс уонтрольной точки, если он разрешен в файле инициализации, только модифицирует заголовки базы данных), поэтому цель большинства администраторв баз данных - ускорение функционирования процесса DBWR.
Если применяемая операционная система поддерживает дополнительные процессы записи в базу данных, необходимо в первую очередь увеличить количество активных процессов DBWR. Некоторые администраторы заблуждаются, думая, что это знчение ограничивается числом ЦП, с которыми работают процессы. Это не так. Значение соотвествующего элемента файла параметров инициализации должно быть основано на количестве файлов данных, существующих в базе. Рекомендуем устанавливать параметр DB_WRITERS равным двухкратному числу файлов базы данных. Если потребуется больше таких процессов, можно запустить utlbstat/utlestat и постепенно увеличить их число.
На функционирование процессов записи в базу данных большое влияние оказыват еще один элемент параметров инициализации: DB_BLOCK_WRITE_BATH. Чем больше его значение, тем реже процессу базы данных сообщается о необходимости выполнит запись. "

to killed

а какя разница какой блок, в рекомендациях типа просто написано, какой вам надо такой и делайте но желательно кратно кластеру, а у меня в Линуксе кластер 12кб, и все...
12 мар 03, 16:53    [145614]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
Oracle X-pert
Member

Откуда:
Сообщений: 640
Znau, my smeyalis' nad etoi statiei vsem otdelom!
12 мар 03, 16:56    [145622]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
Oracle X-pert
Member

Откуда:
Сообщений: 640
Na budushee, staraisya chitat' doc na English.
Ne bydet oshibok perevoda...
12 мар 03, 16:58    [145625]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
killed
Member

Откуда: Moscow
Сообщений: 3526
а что за кластер подразумевается в Linux ?
Там размер блока ограничен 4К
12 мар 03, 17:09    [145652]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
Vladimirgs
Member

Откуда: Казань
Сообщений: 694
to killed

очепятка, блин :)) да , но 4*3 то 12 а что это критично?

to Oracle X-pert

хм, незнай-незнай....здесь не так давно по поводу DBWR был очень длинный пост затеяный помоему Scott Tiger-ом...там много мнений по этому поводу было...
12 мар 03, 17:24    [145699]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
Vladimirgs
Member

Откуда: Казань
Сообщений: 694
killed приводил очень разумные аргументы вот здесь
по поводу DBWR

https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=14884
12 мар 03, 17:36    [145733]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
ShgGena
Member

Откуда:
Сообщений: 562
2 X-pert
1) disk_asynch_io :: FALSE ( pust' OS sama dumaet...)

Eto kak raz problema ne OS a Oracle (dbrw) poskolku DBRW dolgen ispolzovat RAZNYE systemnye komandy
-- v odnom sluchae procto READ() /Write()
-- vo vtorom AIORead()/AIOWrite() (tocho v nazvanii funkciy ne uveren, nado posmotret)
i raznuyu texniku obrabotky uvedomleniya o zavershenii IO operacii NA STORONE DBRW!!!

2) db_file_multiblock_read_count :: 256 ( Esli na Server krome DB nichego Net! )
sort_multiblock_read_count :: 128

eti dva parametra ogulno naznachat toge ne rekomenduetsya, (nemnozko poschitaem)
db_file_multiblock_read_count * db_block_size = 3072 (t.e 3MB)
sort_multiblock_read_count * db_block_size = 1.5M

egely osobo ne nastraivat OS parametry dlya zapisy OS bloka to v bolshenstve sluchaev on = 64K
chto imenno eto oznachaet :
-- na urovne OS eti 3072 budut dolgo delitsya po 64K
-- posle togo kagdiy uchastok (64K) budet chitatsya/pisatsiy otdelno-- ony po otdelnosti popadut v cache OS, kotoraya BUDET GDAT POKA VSE 3MB NE POPADUT K CACHE
i tolko posle etogo soobschit servernomu processu o zavershenii operacii

Krome togo i ni razu ne vstreshalsya s razmerom OS bloka bolee 1M (i to pri prilogenii serioznih usiliy po
nastoyke na urovle OS).

Poputno k DBRW ETO VOOBSCHE NIKAKOGO OTNOSHENIYA NE IMEET t.k. cheniem s diska i rabotoy
s Sort Area zanimautsya servernie processy.
DBRW pishet dirty bloki VSEGDA BLOK BY BLOK.
12 мар 03, 19:10    [145869]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
killed
Member

Откуда: Moscow
Сообщений: 3526
Качественный ответ!

Единственное, я не уверен в этом:

"DBRW pishet dirty bloki VSEGDA BLOK BY BLOK"

По-моему DBWR умеет определять ситуацию, когда нужно записать несколько смежных блоков и соотв-но делает это за одну операцию ("групповую") операцию записи.
До конца не уверен, нужно проверить.
12 мар 03, 19:40    [145900]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
killed
Member

Откуда: Moscow
Сообщений: 3526
>очепятка, блин :)) да , но 4*3 то 12 а что это критично?

не понял, что опечатка?

если имеется в виду, что блок ext2 = 4k , а db_block_size=12 (удивляюсь, как это работает, может в 9ке нет жестких ограничений на ряд размеров блока), то думаю, что не очень критично. У ext2 хороший read ahead.
Но я бы больше 8К не стал бы делать на cooked.
12 мар 03, 19:51    [145907]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
ShgGena
Member

Откуда:
Сообщений: 562
>> По-моему DBWR умеет определять ситуацию,..

Umeet no pri etom dbwr nikogda ne primenyaet tehnologiu POSLEDOVALETNOY zapisi blokov.
on ispolzuet tehnologiyu PARALLELNOY zapisy (no po-blocno), zachem sobstvenno i nugno ASYNC_IO = TRUE
esly rassmotret ves spisok systemnyh sobitiy (V$SYSTEM_EVENTS) to k dannoy sytuacii
primenimy sleduyuschie:

EVENT
db file single write
db file parallel write

t.e kogda nugno zarisat gruppu dirty blocks - to dbrw primenit : db file parallel write.

Drugih sobytiy, otnosyaschihsya k zapisy blokov DBRW kak i ponimay bolshe net.
12 мар 03, 20:26    [145923]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
killed
Member

Откуда: Moscow
Сообщений: 3526
тогда если я правильно понимаю, событие db file parallel write будет охватывать серию вызовов aio_write, каждый из которых размером в оракловый блок ?
13 мар 03, 13:23    [146548]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
Vladimirgs
Member

Откуда: Казань
Сообщений: 694
to killed

может поменяемся аськами, я хочу дружить с умными людьми. Но у меня стоит 8i, на Linux RH7.3 , ФС- ext2 кластер - 4к, ты правильно говоришь, а db_block_size = 12k, этот параметр взят по рекомендации разработчик софта при размещении сервера системы на UNIX-платформе. А почему не должно работать-то?
13 мар 03, 14:05    [146632]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
killed
Member

Откуда: Moscow
Сообщений: 3526
спасибо конечно, но я ICQ не очень люблю. Отвлекает. Лучше почтой если есть что-то конкретное.
13 мар 03, 14:46    [146727]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
ShgGena
Member

Откуда:
Сообщений: 562
2 killed

>> тогда если я правильно понимаю, событие db file parallel write будет охватывать серию вызовов aio_write, каждый из которых размером в оракловый блок
Pravilno (kak i polagau toge). Eto mogno vivesty obychnoy logikoy:

-- chto takoe spisok dirty blocks v db cache - eto ved tolko spisok UKAZATELEY na samy bloki
kotorie sovershenno neobyazatelno razmewchautsya v smegnih uchastkah pamyaty.
-- predpologim chto Oracle reshil delat dlinnie zapisi posledovatelnyh blokov, chto imenno on v etom
sluchae dolgen sdelat:
1) sozdat spisok ukazateley na ZAPISIVAEMYE bloki (eto ne toge samoe chto spisok dirty blokov)
2) otsortirovat etot spisok po kriteriyu -> n_fila + n_bloka v
3) razbit etot spisok na uchastki posledovatelnoy zapisi i opredelit dlinu kagdogo takogo uchastka
4) dlya kagdogo takogo uchastka videlit pamyat (naprimer malloc())
5) po ukazatelyam skopirovat sami bloki iz db cache v tmp pamyat
6) vidat write() / aio_write() dlya uchastka smegnis nomerov blokov iz tmp pamyaty
7) free() dly tmp pamyaty
No samoe interesnoy dalshe:
SMEGNIE NOMERA BLOKOV DLYA FAILA DANNYH SOVERSHENNO NE OZNACHAET CHTO ETO SMEGNIE NOMERA I-NODES NA DISKE
i na urovne OS driver diska v takoy situacii budet vinugden delit uchastok nomerov blokov iz tmp pamyaty na posledovatelnost i-nodes (t.e vitolnyt oblatnuyu zadachu)
a vot dannimi po i-nodes Oracle v sluchae obychyh faylov prosto ne vladeet
(ZA ISKLUCHENIEM SLUCHAYA S RAW DEDVICES - no eto otdelnaya pesnya)

-- esly oracle delaet poblochnuyu zapis (v syncron/asyncron sovershenno ne vagno)
1) dlya kagdogo zapisivaemogo bloka vitaschil ego fizicheskiy adres
2) vipolnil write() / aio_write() dlya bloka
3) pometil blok kak zapisanniy
VSE
13 мар 03, 19:07    [147094]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как ускорить сортировки?  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
Всем привет.
Здравствуйте, -2-. Здравствуйте, Amkad.

Помогите ускорить селект:
select * from MAYA.FILE_TAB
order by decode (T_TYPE, 'header', 1, 'trailer', 3, 2), A1_SORT, A2_SORT nulls first, T_TYPE;


в explain плане написано:

Plan
SELECT STATEMENT ALL_ROWSCost: 4,955,172
2 SORT ORDER BY Cost: 4,955,172 Bytes: 20,808,098,927 Cardinality: 1,801,723
1 TABLE ACCESS FULL TABLE MAYA.FILE_TAB Cost: 627,340 Bytes: 20,808,098,927 Cardinality: 1,801,723

Посоветуйте, что сделать? В оптимизации - 0.
25 дек 12, 10:37    [13681057]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
Типы данных:

A1_SORT VARCHAR2 (22 Char)
T_TYPE VARCHAR2 (9 Byte)
A2_SORT NUMBER
25 дек 12, 11:26    [13681318]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
123йй
Member

Откуда:
Сообщений: 1638
May12,

вы выбираете всю таблицу (отсутствует условие where). ускорить можно только сменив сервер и/или диски
25 дек 12, 11:37    [13681371]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
123йй, спасибо.
а индексы, типы полей никак меня не спасут? ну может что то еще...
в оптимизации - 0. =(
25 дек 12, 11:47    [13681479]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
-2-
Member

Откуда:
Сообщений: 15330
May12,

посмотреть фактическую статистику и, если есть сортировка на диск, увеличить память на сортировку.
25 дек 12, 12:06    [13681660]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
-2-, спасибо.
для этого (просмотра статистики) мне нужны права dba?
как посмотреть фактическую статистику ?
для увеличения памяти на сортировку нужно иметь упомянутые права?
25 дек 12, 12:12    [13681722]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
-2-
Member

Откуда:
Сообщений: 15330
SQL> set autotrace traceonly
SQL> select * from all_objects order by object_type, object_name, owner;

85078 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3901022194

...


Statistics
----------------------------------------------------------
        270  recursive calls
          0  db block gets
      24710  consistent gets
          2  physical reads
          0  redo size
    6442710  bytes sent via SQL*Net to client
      62905  bytes received via SQL*Net from client
       5673  SQL*Net roundtrips to/from client
        892  sorts (memory)
          0  sorts (disk)
      85078  rows processed

SQL>
25 дек 12, 12:19    [13681775]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Performance Tuning Guide and Reference

PGA Memory Management
25 дек 12, 12:20    [13681788]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
May12
123йй, спасибо.
а индексы, типы полей никак меня не спасут? ну может что то еще...
в оптимизации - 0. =(

хрустальный шар говорит, что в таблице вашей кроме тех трёх чахлых полей еще живёт чума навроде лобов или (не дай, мать природа ) лонгов. ежели так и есть и если хранятся они навалом (а не отдельно), то не мудрено, что проблемы у вас с подобным запросом.
25 дек 12, 12:54    [13682044]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
orawish,
хрустальный шар всемогущ и видит правду. Три поля среди сотен типа CLOB. =) что тогда?
25 дек 12, 14:39    [13683131]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить сортировки?  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
orawish, сорри, что утаила.
25 дек 12, 14:45    [13683196]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5   вперед  Ctrl      все
Все форумы / Oracle Ответить