Шрифт:
Интервал:
Закладка:
Index root page
Номер страницы, которая является первой страницей указателей на индексы таблицы
Data pages
Общее количество страниц, в которых хранятся данные таблицы. Этот счетчик включает страницы, хранящие неподтвержденные версии записей и мусор, потому что gstat не может их отличить друг от друга
Data page slots
Количество указателей на страницы базы данных, содержащихся на страницах указателей. Должно равняться числу страниц данных
Average fill
Это гистограмма из пяти 20-процентных "полос", каждая из которых показывает количество страниц данных, чье среднее заполнение попадает в этот диапазон. Процент заполнения определяется соотношением пространства каждой страницы, содержащей данные. В нашем примере среднее заполнение низкое, потому что база данных employee.gdb содержит небольшие структуры записей, и их не так много. Сумма этих чисел дает общее количество страниц, содержащих данные
Fill distribution
Обобщающая гистограмма распределения использования памяти для всех страниц, выделенных в таблице. В нашем примере пока используется только одна страница, и она имеет менее 40% заполнения
Ограничение вывода для gstat -dataЕсли вам не нужен отчет по данным для всех таблиц, вы можете использовать переключатель -t для задания списка таблиц, интересующих вас.
Синтаксис:
gstat -data база-данных -t имя-таблицы1 [имя-таблицы2 [ имя-таблицы3 ..]]
! ! !
ПРИМЕЧАНИЕ. Имена таблиц должны быть набраны в верхнем регистре. К сожалению, gstat не поддерживает переключатель -t[able-list] для баз данных, которые используют чувствительные к регистру идентификаторы таблиц, заключенные в кавычки.
. ! .
Переключатель -r[ecords]Следующая строка
gstat -r база-данных
отображает статистику по размерам и версиям записей.
* Для строк: среднее значение длины строк в байтах и общее количество строк в таблице.
* Для старых версий: среднее значение длины версий в байтах, общее количество версий в таблице и максимальная цепочка версий для записи.
Общее количество строк в таблице может включать активные и зависшие транзакции. Длина записей и версий применима к фактическим данным пользователя - длина не использует счетчик в заголовке, который предшествует каждой версии записи.
ПримерТри таблицы (CAULDRON, CAULDRON1 и CAULDRON2) имеют одинаковые метаданные и объем 100 000 записей. Номинальная, несжатая длина записи 900 байт.
CAULDRON - чистая таблица без старых версий строк. Средняя длина хранимой строки 121 байт - приблизительно 87% сжатия.
CAULDRON1 имеет активную, все еще выполняющуюся транзакцию:
DELETE FROM CAULDRON1;
Каждая строка имеет нулевую (0.00) длину, потому что первичная запись является заглушкой удаления (delete stub), которая содержит только заголовок строки. Все подтвержденные записи были восстановлены как старые версии и сжаты до того же размера, который они имели, когда были первичными записями. Таблица содержит то же количество страниц (4000), что и до операции DELETE. Средний коэффициент заполнения составляет от 85 до 95% для размещения всех заглушек удаления.
CAULDRON2 имеет активную, все еще выполняющуюся транзакцию:
UPDATE CAULDRON2 SET F20FFSET = 5.0
Измененные записи увеличили размер на 2 байта (с 121 до 123), что можно отнести к более низкому уровню сжатия.
Значение 5.0 заменило большинство отсутствующих или нулевых значений, что сделало значение этого поля отличным от других полей. Теперь существует 100 000 старых версий со средним значением 10 байт каждая. Средний коэффициент заполнения увеличен до 99%, а таблица выросла с 138 до 4138 страниц.
> gstat proj.gdb -r -t CAULDRON CAULDRONI CAULDRON2
. . .
Analyzing database pages . . .
CAULDRON (147)
Primary pointer page: 259, Index root page: 260
Average record length: 120.97, total records: 100000
Average version length: 0.00, total versions: 0, max versions: 0
Data pages: 4000, data page slots: 4000, average fill: 85%
Fill distribution:
0 -19%=0
20 -39%=0
40 -59%=0
60 -79%=0
80 -99%=4000
CAULDR0N1 (148)
Primary pointer page: 265, Index root page: 266
Average record length: 0.00, total records: 100000
Average version length: 120.97, total versions: 100000, max versions: 1
Data pages: 4000, data page slots: 4000, average fill: 95%
Fill distribution:
0 -19%=0
20 -39%=0
40 -59%=0
60 -79%=0
80 -99%=4000
CAOLDRON2 (149)
Primary pointer page: 271, Index root page: 272
Average record length: 122.97, total records: 100000
Average version length: 10.00, total versions: 100000, max versions: 1
Data pages: 4138, data page slots: 4138, average fill: 99%
Fill distribution:
0 -19%=0
20 -39%=0
40 -59%=0
60 -79%=0
80 -99%=4138
! ! !
СОВЕТ. Для API-программистов функция API Firebird isc_database_info() и Services API предоставляют элементы, которые делают возможным синхронизировать выполнение поиска и получение статистики по базе данных в ваших программах приложений. Для программистов Delphi, C++ Builder и Kylix доступны различные наборы компонентов для получения статистики базы данных.
. ! .
Пора дальшеЗдесь мы завершаем обсуждение объектов базы данных и перемещаем фокус на язык создания и изменения данных. Наше исследование начинается с общего взгляда на SQL в терминах стандартов и как реализация Firebird разбивается на множество перекрывающихся подмножеств. После этого в главе 20 мы начинаем более подробное рассмотрение данных как множеств и операторов языка манипулирования данными (Data Manipulation Language, DML) для определения данных и манипуляций с ними.
ЧАСТЬ V. Firebird SQL.
ГЛАВА 19. Язык SQL в Firebird.
SQL (произносится "эс кю эль"[62]) - это подъязык данных для доступа к реляционным системам управления базами данных. Его элементы, синтаксис и поведение стандартизовали ANSI и ISO в 1986 году.
С этого времени SQL пересматривался три раза: SQL-89 (опубликован в 1989 г.), SQL-92 (1992 г. или около этого) и самый последний SQL 3, рабочая версия, опубликованная как часть SQL-99.
Язык запросов стандарта SQL является непроцедурным языком, т. е. он ориентирован на результаты операций, а не на способы получения результатов. Его назначение - быть основой для подъязыка, используемого в рамках включающего языка программирования. Цель стандартов - описать механизм внешнего уровня, посредством которого заданный запрос вернет предсказуемый результат, независимо от того, как сервер базы данных внутренне манипулирует данными.
Следовательно, стандарт предписывает в мельчайших подробностях способ задания элементов языка и интерпретацию логики операций, при этом он не задает правил, каким образом разработчики системы управления базами данных должны все это реализовывать. Ожидается "согласованная" реализация базового набора возможностей, и эта реализация может также включать другие возможности, сгруппированные и стандартизованные на уровнях выше "начального уровня".
Firebird и стандарты
Соответствие стандарту - это, скорее, вопрос уровня соответствия, а не абсолют. Разработчики могут свободно реализовывать возможности языка, не описанные в стандарте. Соответствие касается способов реализации возможностей, распознаваемых стандартом и описанных в нем (если таковые есть). Соответствие изменяется обратно пропорционально с количеством стандартных возможностей, внедряемых типично.
Язык SQL Firebird близко соответствует стандартам SQL-92 (ISO/IEC 9075:1992) на начальном уровне (entry level). Firebird вводит множество возможностей в соответствии с более поздним релизом стандарта SQL-99. Хотя SQL в Firebird близко соответствует стандартам, существуют небольшие отличия.
Операторы SQL
Оператор SQL используется для выполнения запроса к базе данных. Язык запросов выражается в операторах, которые задают цель: что должно быть сделано (операция), объекты, с которыми это должно быть сделано, и детализация, как это должно быть сделано. По теории каждое возможное взаимодействие между внешним миром и базой данных осуществляется через синтаксис оператора.
Синтаксические конструкции операторов группируются в соответствии с двумя основными целями.
* Операторы CREATE, ALTER и DROP над объектами метаданных (также называемые объектами схемы или элементами схемы). Язык таких запросов называется языком определения данных (Data Definition Language, DDL).
* Операторы, выполняющие действия над данными. Они представляют язык для определения наборов данных в виде столбцов и строк и задают операции для:
• поиска и преобразования (SELECT) образов таких наборов данных из хранилища данных для чтения приложениями;
• изменения состояния базы данных путем добавления, изменения и удаления указанных наборов (операторы INSERT, UPDATE и DELETE).
Такие операторы, которые выполняют действия над данными, относятся к языку, называемому языком манипулирования данными (Data Manipulation Language, DML).
Реализация в Firebird языка SQL разбивается на несколько пересекающихся подмножеств, каждое из которых используется для специальных целей и включает свои собственные языковые расширения.
* Встраиваемый SQL (Embedded SQL, ESQL) - это "базовая" реализация SQL, состоящая из синтаксиса DDL и DML, которые включаются и в другие подмножества, где это возможно. Это было первоначальной реализацией SQL в предшественнике InterBase, разработанной для включения в клиентские приложения и требующей препроцессора GPRE.
- Delphi. Учимся на примерах - Сергей Парижский - Программирование
- Сделай видеоигру один и не свихнись - Слава Грис - Программирование / Руководства
- Психбольница в руках пациентов - Алан Купер - Программирование