Тетрадочка DBA

Archive for the ‘Uncategorized’ Category

Он идет!

Posted by shane54lv на 10 Июль, 2009

Не могу не поделиться — выцепил в Сети скудные обрывки фраз

Oracle 12g

Yes, you heard right. Oracle 12g is around the corner. There is not much information available on this new release. The only detail that leaked so far is that Oracle 12g won’t support raw filesystems anymore. This is bad news for RAC environments. The OCR and the voting disk relay on raw filesystems via CFS like OCFS.

The word is that ASM will step in and close the gap in 12g. Also, more emphasis on NFS will be placed as well.

Other than that, there’s not much information regarding functionality enhancements available. As soon as I get more details I will post it.

:)

Реклама

Posted in Uncategorized | Отмечено: , , | Leave a Comment »

Хозяйке на заметку — SELECT … SAMPLE

Posted by shane54lv на 9 Июль, 2009

Навеяно постом Elic‘а из обсуждения «грубый count».

Узнал про интереснейшую фичу в Оракле. Есть возможность указать запросу SELECT прочитать лишь часть таблицы (sample) для того, чтобы получить примерный результат. Это нужно, например, чтобы узнать примерное количество строк в таблице. Если их там миллиард, понятно, что девятьсот миллионов или миллиард сто миллионов — разница не сильно большая, а вот count (*) будет работать сутки. Ну и т.д., примеров как это использовать можно придумать много.

Теория

Тип sample может быть как обычно, строки или блоки. Т.к. sample — это лишь предположение, результат от запроса к запросу всегда будет различаться, но можно заставить базу выдавать всегда одно и то же предположение — SEED.

И последнее. При использовании block sample, запрос обязательно должен идти через FTS или FFS. Если существует другой, более оптимальный путь, Оракл будет использовать его и вместо block sample результат будет выдан на основании row sample. Соответственно, чтобы форсировать block sample, необходимо хинтом указать использование фуллскана (хинт +FULL или +INDEX_FFS).

Практика

Берем таблицу KNS.KNS_LOG:

SELECT ROUND (t1.BYTES / 1024 / 1024 / 1024, 0) AS "Gb"
  FROM dba_segments t1
 WHERE t1.owner = 'KNS' AND t1.segment_name = 'KNS_LOG';

Результат — 28 Гб, самое то :) На продукции count(*) я запускать не стану, но зная количество блоков таблицы и скорость нашей подсистемы I/O (очень приличной, кстати), можно предположить, что работать будет долго. Точнее считать лень, да и не суть.

Теперь магия:

SELECT COUNT (1) * 10000 FROM kns.kns_log SAMPLE BLOCK (0.01);

Пояснение:

  • BLOCK (0.01) — используя блочную выборку, прочитать одну десятитысячную блоков таблицы
  • COUNT (1) * 10000 — соответственно, результат умножаем на десять тысяч

Запрос работает менее пол-секунды, результат 188 190 000. Повторные запуски:


188 190 000
153 360 000
149 630 000
129 950 000
229 950 000

Т.е. результат бросает из стороны в сторону очень значительное, в процентном отношении считать опять таки лень, но на глаз +/- 25%. Хотя это нормально для выборки 0.01% данных!

И последнее. Как я говорил выше, чтобы закрепить какое-то одно значение выборки, используем конструкцию SEED ():

SELECT COUNT (1) * 10000 FROM kns.kns_log SAMPLE BLOCK (0.01) SEED (5);

Число 5 — от балды, берем любую цифру, это просто константа для привязки результата запроса. Результат — 205 800 000 и при повторных выполнениях сохраняется, что и требовалось доказать.

И совсем последнее — проверка правильности результата:

SELECT * FROM dba_tables t1 WHERE t1.owner = 'KNS' AND t1.table_name = 'KNS_LOG';

Значение NUM_ROWS: 198 153 830 (статистика собиралась в воскресенье, два дня назад, после чего в понедельник работал джоб, подтирающий самые старые записи).

SELECT * FROM dba_indexes t1 WHERE t1.owner = 'KNS' AND t1.table_name = 'KNS_LOG';

Значение DISTINCT_KEYS для уникального индекса: 143 667 320.

Т.е. результаты запроса с SAMPLE похожи на правду.

Ссылка на доку: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10002.htm#i2065953

Posted in Uncategorized | Отмечено: , , , , , , , , | Leave a Comment »

Правильные опции команды «shutdown»

Posted by shane54lv на 8 Июнь, 2009

Коннор МакДоналд* как-то раз заметил, что Oracle’у следовало более аккуратно называть опции у команды shutdown, а именно:

  • shutdown abort‘ лучше называть ‘shutdown fast‘,
  • shutdown immediate‘ лучше называть ‘shutdown hopefully‘,
  • shutdown transactional‘ лучше называть ‘shutdown when hell freezes over‘,
  • а ‘shutdown normal‘ надо переименовать в ‘shutdown never‘.

Коннор МакДональд (Connor McDonald), основной автор, работает с Oracle с начала 1990-х годов. Он начинал работать с базой данных Oracle версий 6.0.36 и 7.0.12. За последние 11 лет он работал с системами в Австралии, Великобритании, Юго-Восточной Азии, Западной Европе и США. Коннор — член сети OakTable и хорошо известен как в кругах докладчиков на темы Oracle, так и в сетевых форумах по СУБД Oracle. Он поддерживает Web-сайт подсказок и советов (www.oracledba.co.uk), чтобы поделиться своим энтузиазмом в отношении Oracle и добиться более эффективного использования этой СУБД.

Posted in Uncategorized | 6 комментариев »

Путь к Человеку

Posted by shane54lv на 20 Май, 2009

За последний месяц прочитал несколько статей (как пишется — «статей» или «статьей»??), произвели на меня сильное впечатление:

Особенно понравилась про программистов и детский сад — хочу пройтись по тексту Find&Replace’ом и заменить все вхождения слова «программист» на «администратор». За исключением пары мест, корректировка текста не требуется!! После этого распечатаю и повешу на стенку, а так же раздам всей своей команде с напутствием «читать перед сном, в автобусе, обсуждать с женой и уметь рассказать наизусть с выражением». Классные мысли!

UPD:

И немного из другой оперы:

  • Отличный сайт с подборкой всевозможных документов о проектах, для проектов, про проекты…
  • И оттуда же: методики компании Microsoft — Часть 1 и Часть 2

Posted in Uncategorized | Отмечено: , , , | 2 комментария »

Как по-человечески постить куски кода в WodrPress

Posted by shane54lv на 20 Май, 2009

Наконец-то!!! Вот оно оказывается, как в этом навороченном WordPress’е оформлять `code snippets`:

select * from dual;

Фишка — использовать «тег» [ sourcecode language=’sql’ ] (в кавычках — потому что тег в квадратных скобках; пробелы после и перед скобками не нужны, это я обманываю парсер). Доступных языков целая куча, все подробности в FAQ самого WordPress’а. Как всегда, все тайное лежит там, где и должно лежать.

Ну и раз уж я столько перечитал в поисках этого решения — вот пара ссылок по теме:

— хороший (вроде как) plugin для WordPress -> WP-syntax
страница с обзорами некоторых решений этого вопроса (откуда я и нашел WP-syntax)

На этом мой первый настоящий пост закончен. Спасибо :)

UPD: Вот еще попалось на глаза: Подсветка исходного кода.

Posted in Uncategorized | Отмечено: , , , , | 2 комментария »

Intro

Posted by shane54lv на 29 Апрель, 2009

Есть у меня такой word’овский файлик, в который я пишу все подряд, что хочу не забыть и оставить на будущее. Это и ссылки, и номера нот с Металинка (Oracle Metalink Note), скрипты, которые потом лень писать заново, заметки, параметры конфигурации баз данных и их значения… Короче все то, что обычно пишут на желтые листочки, в тетрадочки, на листики и просто пытаются запомнить.

За 7 месяцев размер этого файла достиг 70 страниц шрифтом с кеглем 8 (скрипты — вообще 6). Т.е. информации — много. Все это время, что я пишу его, хотелось научиться, как в Ворде делать теги и потом искать только по ним, а не всему тексту. Потому что основная задача этого файла — все же поиск, а не сам факт записи. И вот эта «функциональность» мне никак не поддавалась.

В итоге меня осенило — какого хрена я мучаюсь, пока не поздно — надо перенести информацию в блог. Хотя может уже и поздно, перенести сюда 70 страниц текста, половина из которого — ссылки и SQL скрипты — задача муторная.

Но я попробую.

Posted in Uncategorized | Отмечено: , , , | 4 комментария »