За да възпроизведа проблемите, описани в статията; както и за да тествам евентуалните решения, драснах набързо един тестова пакет. Има си кусури - примерно не се държи правилно ако config таблицата е празна - но за решение “набързо” се получи добре. Всъщност толкова добре, че реших да го сложа тук, да не го загубя
Category Archive for 'Oracle'
Отдавна не съм споделял oracle-related приключения. Пусти мързел…
Днес ще разкажа за следната случка. На всеки час едно приложение “замръзва” за няколко секунди. Всъщност идентифицирането на причините отне доста усилия. Видимите симптоми се появяват на ниво application server. Ровихме из настройките там, ровихме из мрежата, ОС, базите…
На края успяхме да идентифицираме следната зависимост: това приложение (покрай другите неща) използва и една супер натоварена таблица. Информацията в тази таблица се пази няколко часа, след това се изтрива; за това пък за тези няколко часа се натрупват доста данни - гигабайти. Операциите са предимно Insert и Select. Таблицата е разделена на partitions по часове, като на всеки час един job минава и затрива данните от най-стария partition с
alter table ... truncate partition ... UPDATE GLOBAL INDEXES
Това UPDATE GLOBAL INDEXES се налага, защото първичния ключ на таблицата има глобален индекс. Това е така, защото на partitioned таблици, уникалния индекс или трябва да е глобален, или да съдържа partition key колоните (логично).
Оказа се, обаче, че в тази схема има голям проблем. Странното “замръзване” на приложението съвпада точно с времето, когато се стартира този този TRUNCATE job.
dba_hist_tbspc_space_usage
Posted in Oracle on Jun 10th, 2010
Много полезно, за всички, които си пазят AWR snapshots за по-дълъг период от време. От тази таблица може да се изкара trend за нарастването на базата. Примерно по месеци изглеждат така:
select tsu.snap_id, to_char(sn.mon, 'Mon.YYYY'), round(sum(tsu.tablespace_size * nvl(ts.blocksize, p.value))/1024/1024/1024, 2) GB_size
from dba_hist_tbspc_space_usage tsu,
sys.ts$ ts,
v$parameter p,
(select trunc(begin_interval_time, ‘MONTH’) Mon, min(snap_id) snap_id
from dba_hist_snapshot
group by trunc(begin_interval_time, ‘MONTH’)) sn
where p.name = ‘db_block_size’
and tsu.tablespace_id = ts.ts#(+)
and sn.snap_id = tsu.snap_id
group by tsu.snap_id, sn.mon
order by 1
Този SQL идва с няколко забележки:
- малко ми е тъпо размера на tablespace да се пази в блокове, а не байтове. Отне ми известно време да схвана какви са числата. Документацията не помага много
- ако в миналото е имало tablespace, който в последствие е drop-нат, се приема, че е бил с default-ния block size. Аз, лично не намерих друг начин
- още нещо леко тъпо: v$tablespace няма изведена колонка blocksize, докато dba_tablespaces няма ts#. Заради тази… хм… неконсистентност в поведението, предпочетох да използвам директно sys.ts$. На който не му харесва това, може да си ги join-не по tablespace_name
DG Switchover мотичка
Posted in Oracle on May 21st, 2010
Напоследък съм влюбен в DataGuard Broker. Страшно полезен инструмент! Е, има си своите странности, все пак…
Днес тествах switcover при конфигурация от една primary, един physical и един logical standby. Предварително се подготвих с research на възможните бъгове и техните workarounds. За щастие сме на доста стабилна версия. Примерно една от грозните мотики е описана в note 761661.1. Абе убих си един ден ровене…
И все пак не бях съвсем изряден. Когато се засилих да прехвърлям, се случи следното:
10.2.0.5 is out
Posted in Oracle on Apr 30th, 2010
Цък:
Забелязах, че вече има 10.2.0.5 за Linux x86 и Linux x86-64. Patchset 8202632.
Да ние честит новия пачсет!
DataGuard закачка
Posted in Oracle on Apr 15th, 2010
Записвам си да не забравя.
Проблем: боркера мрънка, че нещо не му е на кеф:
DGMGRL> show configuration
Configuration
Name: DG_DEV
Enabled: YES
Protection Mode: MaxPerformance
Fast-Start Failover: DISABLED
Databases:
prim - Primary database
stb1 - Logical standby database
stb2 - Physical standby database
Current status for “DG_DEV”:
Warning: ORA-16608: one or more databases have warnings
Kyle Hailey
Posted in Oracle, Консултантски on Feb 14th, 2010
Един от основателите на OakTable Network. Работил в Oracle Kernel Development, минал през Oracle Gold Support в Париж, после през Quest, за да се завърне в Oracle като един от “мозъците”, измислили OEM. Един от евангелистите на wait interface-а като мощен инструмент за performance troubleshooting/tunning. От четеното за него подозирам, че той стои и зад много полезния, но рядко използван механизъм за Direct Memory Access в Grid Cоntrol-a. В момента работи за Embarcadero, но като лектор се включва с Performance-related сесии на семинарите на Hotsos, NoCOUG, RMOUG, NYOUG, Oracle World и Dbforum (защо не и на BGOUG, някой ден?).
Човека има какво да сподели. И ще го сподели, на живо, макар и виртуално, в края на март. Подозирам, че ще си струва.
Правилен индекс, грешен подход
Posted in Oracle on Feb 8th, 2010
Това ще влезе в категория quick checks. Предварително казвам, че (все още) не познавам добре системата, за която става дума.
Днес ми излезе интересен въпрос: една таблица има няколко десетки милиона реда, с данни от 8 години насам. Има колонка с дата, по която има индекс. Колонката няма хистограма. Когато пуснем заявката select count(1) from tab where date_col > sysdate-1, съвсем правилно, се изпозлва съответният индекс, т.е. не сме в тази скучна ситуация “Oracle не ми използва индекса”. Обаче се прави Index Fast Full Scan (wtf???), което естествено, дава незадоволителна производителност:
Сбирка на БГПО пролет’10
Posted in Oracle, Консултантски on Jan 18th, 2010
Ако има някой не-чул/не-разбрал, да кажа и аз: пролетната сбирка на БГПО ще се случи в края на април (от 23 до 25 април 2010). И този път организаторите са успели да привлекат звезда от световна величина: самият Tom Kyte. Адски съм благодарен за усилията, които правят - не е лесно да се доведе такъв човек. И се надявам той да не им върже тенекия, както направи Anjo Kolk.
Всъщност с напредването на възрастта (пригответе големи подаръци за наближаващият ми юбилей, благодаря
), все повече оценявам нашите си “звезди” - примерно Юлиян Дончев. Owen Hughes също е почти местен с третото си идване, a и също е много добър лектор. Както и Пламен, когато реши да говори. Пък и всеки друг, решил да сподели опит или да покаже резултати от неговия research. (Иване, не се ослушвай)
Този път аз ще се включа с една по-нестандартна лекция. Мисля, че това, което съм подготвил, ще бъде интересно не само за DBA, а и за developers, sysadmins, даже и за IT-ориентирани мениджъри. За това пък съм се замислил (и дано да успея) за есенната сбирка да подготвя най-hard Oracle-database-related лекцията от всичко, което съм правил до сега. Ама това е в далечното несигурно бъдеще… Сега ще говоря за performance forecasting. Тази презентация си я подготвям от година и половина и се надявам, че се е получила добре.
Ще се видим там, нали?
Flash-free Metalink
Posted in Oracle on Jan 8th, 2010
Преди 2-3 месеца Oracle потопиха в море от скръб всички честни клиенти, като затвориха старата бърза и удобна версия на Metalink и оставиха само бъгавата неудобна и нелогична Flash версия. Ако е вярно това, че когато те псуват, те сърби най-задната част от тялото, сигурно всички в Oracle Support са подлудили личните си дерматолози. Думите са слаби да опиша само аз какво им мисля, да не говорим за сръбските DBA-и.
Но има искрица в тунела. Днес случайно попадах на HTML версия на омразния My Oracle Support. Освободена от всички тъпи “красоти” на flash версията (които може да са много cool, ама само до петото отваряне). Бърза, спретната, и съвсем легална. Enjoy!