Обзорный тренинг Андрей Хромов, технический консультант, Sybase CIS Quick Start Москва, 4 июня, 2010 1 – Sybase Confidential – February 13, 2009 Наша программа: Модуль 1. Что такое Sybase IQ Модуль 2. Архитектура и терминология Модуль 3. Инсталляция Sybase IQ ПЕРЕРЫВ – 15 мин Модуль 4. Создание базы данных Модуль 5. Конфигурирование сервера ОБЕД – 1 час Модуль 6. Типы данных. Таблицы. Индексы. ПЕРЕРЫВ – 15 мин Модуль 7. Загрузка данных Модуль 8. Работа с Sybase IQ ВОПРОСЫ И ОТВЕТЫ – 15 мин 2 – Sybase Confidential – February 13, 2009 9:00 – 9:30 9:30 – 10:15 10:15 – 10:45 11:00 – 11:45 11:45 – 12:30 13:30 – 15:15 15:30 – 16:15 16:15 – 16:45 Что такое Sybase IQ Модуль 1 SYBASE IQ • СУБД, разработанная специально для Хранилищ Данных, оптимизированная для: – Скорости: А) обработка запросов, Б) загрузка данных – Экономичности: А) администрирование, Б) платформа – Простоты: А) разработка, Б) эксплуатация – Масштабируемости: любой размер проекта • Sybase IQ : – предназначена для BI проектов – это НЕ «OLTP» и НЕ «универсальная» СУБД – обладает уникальными характеристиками Архитектура Хранилища данных Извлечение Трансформация Загрузка Base décisionnelle Data Warehouse Data Marts Анализ, Запросы, Отчеты SYBASE IQ: в чем уникальность подхода 1. Вертикальное секционирование • Традиционные СУБД (Sybase, Oracle, IBM, Microsoft) • Sybase IQ bank ccy amnt date inst ctry bank ccy amnt date inst ctry bnpp usd 128000 12/07/2008 swap fra bnpp usd 128000 12/07/2008 swap fra ca usd 90234 01/02/2012 bond usa ca usd 90234 01/02/2012 bond usa bnpp eur 34234 10/11/2005 fx ita bnpp eur 34234 10/11/2005 fx ita hsbc gbp 929023 09/05/2014 fra gb hsbc gbp 929023 09/05/2014 fra gb nxbp jpy 83445 31/12/2009 repo jap nxbp jpy 83445 31/12/2009 repo jap ixis usd 343456 24/04/2007 loan usa ixis usd 343456 24/04/2007 loan usa sg eur 674434 01/06/2006 dep ger sg eur 674434 01/06/2006 dep ger • Сокращение Ввода/Вывода, • Избавление от эффекта "table scan" SYBASE IQ: в чем уникальность подхода 2. Полное индексирование всей базы Bitwise Bitmap Bitwise Date Bitmap bank ccy amnt date inst ctry bnpp usd 128000 12/07/2008 Swap fra ca usd 90234 01/02/2012 bond usa bnpp eur 34234 10/11/2005 fx ita hsbc gbp 929023 09/05/2014 fra gb nxbp jpy 83445 31/12/2009 repo jap ixis usd 343456 24/04/2007 loan usa sg eur 674434 01/06/2006 dep ger usd eur gbp jpy 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 Bitmap • Отсутствие необходимости в сложном специальном тюнинге • Полная готовность к ad-hoc запросам SYBASE IQ : в чем уникальность подхода 3. Сжатие данных Bitwise Bitmap Bitwise Date Bitmap Bank Ccy date inst ctry bnpp Usd 12/07/2008 Swap fra ca bnpp Usd Eur amnt 128000 90234 34234 01/02/2012 10/11/2005 bond fx Bitmap usa ita Bitwise Bitwise Bitmap Bitmap Bitwise Bitwise Bitwise Bitmap Bitwise Date Date Date Bank Ccy Bitmap amnt date Bitwise Bitwise Date Bank amnt date Bank Ccy Ccy Bitmap amnt date Bitwise Bitwise Date Bank Ccy Bank bnpp bnpp Usd bnpp Usd Usd ca ca ca amnt Ccy128000 amnt 128000 bnpp bnpp Usd Usd Usd UsdUsd ca Usd ca Usd date date 12/07/2008 128000 12/07/2008 12/07/2008 128000 128000 12/07/2008 12/07/2008 90234 01/02/2012 90234 90234 01/02/2012 90234 01/02/2012 01/02/2012 90234 01/02/2012 bnpp Eur bnppbnpp EurEurEur 34234 34234 10/11/2005 bnpp Eur 34234 10/11/2005 34234 10/11/2005 bnpp 34234 10/11/2005 10/11/2005 hsbc hsbchsbc gbpgbpgbp hsbc gbp 929023 09/05/2014 fra gb hsbc hsbc nxbp jpy 83445 31/12/2009 repo jap nxbp jpy jpy nxbp jpy nxbp ixis ixis usd 343456 24/04/2007 loan usa sg eur 674434 01/06/2006 dep ger ixisixis ixis sg sg sg gbp gbp nxbp jpyjpy nxbp ixis sgusd eur usd eur sgusd eur eur eur 929023 09/05/2014 09/05/2014 929023 83445 31/12/2009 31/12/2009 83445 usd usd 929023 09/05/2014 09/05/2014 929023 09/05/2014 929023 83445 31/12/2009 31/12/2009 83445 83445 343456 31/12/2009 24/04/2007 343456 24/04/2007 343456 24/04/2007 674434 24/04/2007 01/06/2006 343456 343456 674434 24/04/2007 01/06/2006 674434 01/06/2006 674434 01/06/2006 01/06/2006 674434 • Производительность • Расходы на диски снижаются на 50% Bitmap Bitmap Bitmap inst Bitmap inst inst Bitmap inst Bitmap Bitmap Bitmap ctry Bitmapctry Bitmapctry ctry Swap Swap Swap inst ctry Swap Swap fra fra fra frafra bond usausa usa bond usa bond usa bond bond fx fxfx fxfx ita ita ita itaita fra frafra gb gb repo repo japjap gbgb gb loan usa japjap jap deploan loan ger usa usa fra fra repo repo repo loan usa dep loan ger dep dep dep usa ger ger ger SYBASE IQ: Основные характеристики • • • • • • • • • • Очень высокая скорость обработки запросов (операции чтения) Оптимизированная массовая загрузка Внешне выглядит как обычная реляционная база данных Стандартный SQL интерфейс (Sybase, ODBC, JDBC) Открытость к модели данных (реляционная, многомерная) Простота настройки и конфигурирования Низкие затраты на администрирование Широкий выбор платформ (Unix, Linux, Windows) Линейная масштабируемость Наращиваемость: архитектура IQ Multiplex Наращиваемость: Sybase IQ Multiplex • «Программный» кластер Поступление порции новых данных Интернет-пользователи Внутренние пользователи: Балансировка нагрузки Маркетинг, Аналитики(Data Mining) • Наращивание мощности по принципу «Plug’n Play» • Линейная масштабируемость, низкий TCO • Два вида узлов кластера: «Читатель» или «Писатель» • Балансировка нагрузки, управление ресурсами • Обеспечение функции «Высокой доступности» IQ Multiplex в цифрах Загрузка данных 1 выделенный сервер Нагрузка на ЦП: Avg CPU User Avg CPU System 0.95 0.02 Обработка запросов От 10 до 50 одновременных запросов 1 сервер 4 процессора 8 ГБ ОЗУ 18 16 14 12 10 8 6 4 2 0 1 Тестовая база Таблицы размером 1-5 млрд. строк 2 3 4 5 6 7 10 Users 8 9 10 1 2 3 4 5 6 7 8 9 10 10 Users 11,66 0,18 2,45 5,14 1,16 2,59 9,31 0,29 0,19 0,46 50 Users 17,39 1,26 7,3 8,96 1,91 5,44 13,65 0,61 0,53 2,01 IQ Multiplex в цифрах. Загрузка одновременно с обработкой запросов Результаты теста оказались неожиданными. Времена исполнения запросов на сервере с нагрузкой были ниже, чем на сервере без нагрузки. Вероятнее всего это связано с кэшированием ввода/вывода в диском массиве MSA 1000. Поскольку в этом тесте 16 14 ввод/вывод не был 12 узким местом, то 10 загрузка данных не 8 принесла ожидаемого 6 негативного эффекта. 4 2 Сервер «Писатель», принимавший входящий 0 1 2 поток данных, также не почувствовал никакого ухудшения производительности Isolated Conncurrent with Load 3 4 5 6 7 8 Conncurrent with Load Isolated 9 10 1 2 3 4 5 6 7 8 9 10 15.56 0.56 5.4 7.5 1.44 4.7 12.08 0.37 0.34 1.06 14.96 0.51 7.09 8.12 1.1 4.52 11.88 0.26 0.36 0.86 Итак, SYBASE IQ – это: • На 100% решение для BI задач, разработанное для: – Радикального увеличения производительности, снижения затрат (на ресурсы, на «тюнинг» базы и запросов, на эксплуатацию), для упрощения процедуры развертывания и дальнейший роста платформы – Возможности работать с данными ПО-ДРУГОМУ – Обеспечения гарантии успеха Ваших проектов • Решение, с которым мы сейчас познакомимся поближе • Решение, которое стоит попробовать Архитектура и Терминология Модуль 2 Платформы Sybase IQ Платформы, поддерживаемые Sybase IQ 15.2 • Sun Solaris (64-bit) – SPARC64 – UltraSPARC T – X64 (Opteron) • IBM AIX (64-bit) • HP-UX Itanium (64-bit) – HP-UX PA-RISC (64-bit) – только IQ 12.7 • Linux – Linux x86/x64 (32- и 64-bit) – RHEL и SLES – Linux on IBM POWER (64-bit) • Windows (32- и 64-bit) – Windows Server 2003, 2008 – Windows XP, Vista, W7 Сервер Sybase IQ • Сервер Sybase IQ – это процесс ОС, запущенный на серверном компьютере Этот сервер баз данных является «мозгом» системы Sybase IQ Пользователи подсоединяются к серверу IQ, чтобы получить доступ к базе IQ Включает в себя возможности настройки • Рассчитан на работу только с одной базой Sybase IQ Иметь несколько баз на одном сервере не рекомендуется Пользователи могут эмулировать работу с несколькими базами данных внутри одной базы IQ путем логического разделения объектов • Использует функционал Sybase SQL Anywhere (ASA) Для поддержки ряда функций Sybase IQ используется код сервера ASA Sybase IQ и ASA • SQL Anywhere (ASA) – это реляционная СУБД, которая может существовать как сама по себе, так и в связке с Sybase IQ – Поддерживает ANSI SQL и ряд дополнительных конструкций – Зрелая СУБД, давно и с успехом существует на рынке. • Sybase IQ – Патентованная технология хранения – Вертикальное хранение данных – Sybase IQ использует некоторый функционал ASA Sybase IQ и ASA IQ и ASA – это симбиоз двух продуктов • Функционал ASA, используемый в IQ – – – – Механизм обслуживания подключений пользователей Синтаксический разбор SQL-запросов Система безопасности (пользователи, права, ит.п.) Механизм Component Integration Services (CIS) • Хранимые процедуры Sybase IQ можно писать, используя один из двух SQL-диалектов ASA - T-SQL или WatcomSQL – Системные хранимые процедуры Sybase IQ написаны на WatcomSQL База данных Sybase IQ • Включает следующие компоненты – Три “накопителя” - Stores Catalog Store (для метаданных) IQ Store (для данных) IQ Temporary Store (для временных данных) – Файлы сервера Журнал сообщений IQ (IQ message log) Журнал транзакций Catalog Store (Catalog store transaction log) Журналы сервера IQ (IQ server log) Архитектура Sybase IQ Общая картина (конфигурация с одним сервером) Пространства БД (dbspaces) 12.7 • Пространство БД (dbspace) – это логическое имя для дискового пространства, используемого базой данных IQ – dbspace может быть файлом ОС или «сырым» устройством, выделенным под Sybase IQ • База данных Sybase IQ обычно включает в себя несколько dbspace: – IQ Store, Catalog Store и IQ Temporary Store – все они состоят из одного или нескольких dbspace Пространства БД (dbspaces) IQ 15 • В Sybase IQ 15 dbspace – это логическое имя контейнера, объединяющего в себе несколько dbfiles • Иерархическая структура базы данных в Sybase IQ 15: – База IQ состоит из 3 Накопителей (Stores): IQ Store, Catalog Store, IQ Temporary Store – Каждый из Stores может состоять из 1 или нескольких dbspace Catalog Store и IQ Store - из 1 или нескольких dbspace IQ Temporary Store - всегда только из 1 dbspace – Пространство БД (dbspace) может состоять из 1 или нескольких файлов БД (dbfiles) Некоторые dbspace могут состоять только из 1 dbfile – Файл БД (dbfile) может быть файлом ОС или «сырым» устройством Иерархия структуры базы в IQ 15 Stores dbspaces dbfiles IQ 15 Пространства БД (dbspaces) в IQ 15 IQ 15 • dbspace – логический контейнер файлов, относящихся к одному из Stores. Аналог “базы данных” в ASE • Catalog Store имеет только 1 dbspace – SYSTEM – для размещения таблиц каталога БД – Может состоять лишь из 1 dbfile • IQ Store после создания нового сервера имеет 1 dbspace. В дальнейшем обычно имеет несколько dbspaces – IQ_SYSTEM_MAIN – содержит системные метаданные (аналог базы данных master в ASE) – Дополнительно создаваемые dbspace служат для размещения пользовательских данных – Каждый dbspace может включать в себя множество dbfile • IQ Temporary Store имеет только 1 dbspace – IQ_SYSTEM_TEMP – для хранения временных данных – Может состоять из множества dbfiles Накопитель Catalog Store • Каждая база IQ имеет Сatalog Store. Это всегда 1 dbspace – Это всегда файл ОС – Этот dbspace растет автоматически по мере добавления новых объектов базы • Содержит служебную информацию о базе IQ – Метаданные (хранятся в системных таблицах) – Хранимые процедуры (системные и пользовательские) • Также известен как ASA-файл базы (database file) – Физическое имя файла <имябазы>.db • Логическое имя Сatalog Store - SYSTEM Накопитель IQ Store • Служит для хранения данных – в виде сжатых индексов – Содержит журнал транзакций для данных в таблицах IQ – Содержит структуру для управления распределением места (список свободного места, free list) • Каждая база IQ имеет только один IQ Store – Обычно состоит из нескольких dbspace – Эти dbspace могут создаваться как «сырые» устройства или как файлы ОС • Логическое имя первого dbspace - IQ_SYSTEM_MAIN – Имя первого физического файла - <имябазы>.iq (если dbspace был создан как файл ОС) Накопитель IQ Temporary Store • «Рабочая область» базы данных – Здесь сортируются данные для построения тех индексов, что строятся в процессе загрузки – Здесь производится сортировки и группировки, необходимые для обработки запросов • Имя физического файла - <имябазы>.iqtmp (если dbspace создан на файловой системе) • Каждая база имеет только одно IQ Temporary Store – Может состоять из нескольких физических файлов – Может располагаться на «сырых» устройствах или на файлах ОС • Логическое имя первого dbspace - IQ_SYSTEM_TEMP Журнал сообщений IQ (Message Log) • Текстовый файл. Формат пригодный для чтения. Содержит: – – – – Сообщения об массовых операциях INSERT и DELETE Сообщения об ошибках Информационные сообщения Планы запросов • Физическое имя файла - <имябазы>.iqmsg – Каждая база IQ имеет один журнал сообщений • Это всегда файл ОС Журнал транзакций Catalog Store • Это журнал транзакций ASA-базы Сatalog Store – К данным IQ Store и изменениям данных, проходящим в IQ Store, отношения не имеет • Используется для отката (roll back) или наката (roll forward) изменений в базе Catalog Store • Физическое имя файла - <имябазы>.log • Это небольшой файл ОС, который с течением времени медленно увеличивается База данных IQ. Общая картина Компоненты базы Sybase IQ (конфигурация с одним сервером) Понятие «Таблица» в IQ • Таблицы IQ - это «логические» таблицы, определенные в Сatalog Store – На самом деле таблица – это просто набор колонок • Три типа таблиц – Основные таблицы (Base tables ) – Локальные временные таблицы (Local temporary tables) – Глобальные временные таблицы (Global temporary tables) Понятие «Индекс» в IQ • Каждая колонка в таблице IQ всегда содержит по крайней мере один индекс, используемый для выборки данных и обработки запросов – Индекс «по умолчанию» создается в момент создания таблицы – Для обеспечения скорости выборки на большинстве колонок обычно создаются дополнительные индексы • Тип нужного индекса определяется по – Ожидаемой кардинальности данных в колонке – Тому, как эта колонка используется в запросах • 9 типов индексов Fast Projection (FP) = «Индекс по умолчанию» Low Fast (LF) Date (DATE) High Non Group (HNG) Date & Time (DTTM) High Group (HG) Time (TIME) Compare (CMP) Word (WD) Инсталляция Sybase IQ Модуль 3 Размер требуемого места на диске •Бинарники IQ – Unix / Linux: до 800MB – Windows: до 375MB (283MB для IQ) •База данных – IQ Store: от 70 до 100% размера входных данных – IQ Temporary Store: от 20 до 25% размера IQ Store; определяется в зависимости от количества пользователей, индексов и данных •Пространство для файлов загрузки – Пространство, необходимое для размещения файлов с исходными данными, для последующей загрузки в IQ •Файл подкачки – Равный или удвоенный размер объема физической памяти (RAM) Рекомендации к оборудованию • Чем больше ПРОЦЕССОРА, тем лучше – Ускоряется Загрузка данных (Load Table умеет использовать SMP) – Улучшается производительность при многопользовательской нагрузке – Более быстрые CPU предпочтительнее • Рекомендуется 1 GHz (или выше) – Производительность сервера IQ практически линейно зависит от скорости процессора – IQ больше нагружает CPU, чем подсистему Ввода/вывода • Чем больше ПАМЯТИ, тем лучше – Минимум 4 GB на каждый CPU – Лучше 8 ГБ на 1 CPU Инсталляция Sybase IQ • Перед началом инсталляции выберите, какие компоненты вы хотите установить: Старт сервера Sybase IQ - Windows Старт Sybase IQ 1. Выберите: Пуск > Программы > Sybase > Server IQ 15.1 > Start Sybase IQ Demo Database 2. Запустится база данных iqdemo на сервере Sybase IQ с именем hostname_iqdemo • Рекомендуемый метод запуска сервера Sybase IQ будет обсуждается в модуле Настройки сервера и Опции БД – Там обсуждаются настройки и опции сервера Остановка сервера Sybase IQ - Windows Остановка IQ – Windows 1. Откройте окно консоли сервера Sybase IQ. Для этого щелкните мышкой на иконку “IQ” на системном трэе – в нижнем правом углу экрана. 2. Нажмите ‘Shutdown’ (Остановить). 3. Опции командной строки запуска сервера определяют режим остановки: ждать завершения активных соединений или нет. . Соединение с сервером Sybase IQ • Sybase IQ поддерживает следующие типы соединений: – ODBC, OLE-DB и Embedded SQL – Sybase Open Client – JDBC • С Sybase IQ поставляются клиентские приложения: – – – – Sybase Central – соединяется через ODBC или JDBC dbisql (Interactive SQL Java) – соединяется через ODBC или JDBC dbisqlc (Interactive SQL клиент) – соединяется через ODBC iqisql (Open Client Interactive SQL) – соединяется через OpenClient Соединение с помощью DBISQL • DBISQL - это клиент для связи с Sybase IQ – – – – Поставляется вместе с Sybase IQ Это рекомендуемый метод для взаимодействия с Sybase IQ Будет полезен для администраторов баз данных Может использоваться как инструмент написания запросов • DBISQL имеет два GUI-интерфейса и два режима работы – GUI (графический) Interactive SQL Java (тонкий java клиент) Interactive SQL Classic (толстый клиент, написан на C) – Режим работы без GUI (беззвучный режим) Соединение с помощью Sybase Central • Графическая консоль для управления серверами Sybase – Данная Java-версия Sybase Central предназначена только для использования с IQ – Использует соединение ODBC или JDBC • Для соединения с Sybase IQ (Windows): – Меню Пуск > Sybase > Sybase IQ 15.1 > Sybase Central Java Edition – Логин - DBA / Пароль– SQL • Для соединения с Sybase IQ (Unix / Linux): – Запустить из командной строки Sybase Central Agent – Запустить из командной строки Sybase Central Возможности Sybase Central • Создание новых баз данных Sybase IQ • Запуск и остановка серверов Sybase IQ • Добавление и удаление dbspaces, dbfiles • Создание таблиц, представлений и индексов – – – – Изменение таблиц и представлений Перестройка индексов Просмотр и изменение данных Генерация DDL скриптов • Создание хранимых процедур • Добавление пользователей и групп, управление правами Соединение через Open Client • Open Client – это дополнительный способ соединения с Sybase IQ – Использует TDS протокол Sybase • Зачем нужно использовать Open Client? – Предоставляет возможность соединения с Sybase IQ через командную строку – Для загрузки данных из других удаленных серверов/баз • Соединение с Sybase IQ через Open Client имеет ряд особенностей: – Использует режим транзакций “unchained” – Не является ANSI стандартом – Не может распознавать некоторые типы данных IQ Роль интерфейсного файла • TDS клиенты и сервера находят друг друга посредством просмотра интерфейсных файлов • Интерфейсные файлы необходимы: – Серверам для указания сетевых адресов, которые они должны слушать, чтобы клиенты могли к ним подключиться – Клиентам, чтобы определить, куда направлять свои запросы на подключение – Чтобы определить местонахождение сервера из которого нужно загрузить данные • Интерфейсные файлы имеют различные имена на разных платформах: – UNIX: $SYBASE/interfaces – Windows: %SYBASE%\ini\sql.ini Создание баз данных Модуль 4 Состав базы данных IQ База создается при помощи команды CREATE DATABASE Пространство БД (dbspace) • dbspace – это логическое имя части дискового пространства, выделенной под использование базой IQ • Каждая база IQ включает в себя несколько dbspace – Максимально допустимое количество dbspace для одной базы - 2047 • В каждой новой базе для каждого Накопителя (Store) имеется как минимум один dbspace • Впоследствии к базе могут добавляться дополнительные dbspace dbspace • Новые данные в базе распределяются по всем dbspace – Правильный подход: при создании базы сразу выделить для нее все необходимое пространство • Данные распределяются между всеми dbspace равномерно – Данные записываются во все dbspace по алгоритму round-robin – Такой подход является рекомендуемым для наилучшей производительности • Объекты могут быть помещены в заданный dbspace – Объекты можно перемещать из одной dbspace в другую – Функции управления dbspace рассматриваются позднее • Планируйте по крайней мере 10% резервного пространства в вашей базе – Место может понадобиться, например для новых версий таблиц (рассматривается позднее) Планирование dbspace • Перед созданием базы необходимо определиться с типом и размером выделяемых под нее дисков – Размер Catalog Store не должен превышать 1TB (или 4GB на Windows с файловой системой Fat32) – Размер IQ Store и IQ Temp Store На сырых устройствах – без ограничений (может зависеть от платформы) На файловой системе – 4TB • dbspace для IQ Store и IQ Temp Store в последствии могут быть расширены или удалены из базы данных – Для того, чтобы можно было расширить существующую секцию dbspace, она должна быть создана определенным образом (дополнительный синтаксис при создании) – Пустая секция dbspace может быть удалена Catalog Store • Всегда создается на файловой системе – Рекомендуется создавать этот файл на той же машине, на которой работает сервер IQ • Растет по мере добавления новых объектов в базу – Никогда не сокращается, даже в случае удаления объектов • На файловой системе должно быть достаточно места под файл каталога – Другие файлы IQ (включая файл сообщений IQ и серверные журналы IQ) обычно располагаются на той же файловой системе, что и Catalog Store. – Если на файловой системе закончится место, сервер «зависнет» dbspace для IQ Store и IQ Temp Store • Могут создаваться на «сырых» дисках или на файловой системе • Состоят из заранее выделенного набора страниц данных • Могут быть увеличены на величину «зарезервированного» при создании dbspace места – Существует специальный синтаксис, выполняющий команду увеличения dbspace и создания dbspace с последующей возможностью расширения • Зарезервированное пространство позволяет: – Добавлять место в существующий dbspace – dbspaces, занявший все свободное место на диске может быть перенесен на другой диск бОльшего размера (для этого нужно остановить сервер) и затем расширен. Порядок действий при создание базы Шаг 1. Определить тип сервера, который вы хотите создать Шаг 2. Выбрать тип дискового устройства Шаг 3. Оценить размер базы данных Шаг 4. Создать базу данных Шаг 1: Выбрать тип устройства «Сырые» диски против Файловой системы Преимущества Сырой диск Управляются напрямую приложением (СУБД), минуя файловую систему Недостатки Сложнее в управлении Производительность может быть выше Размер устройства может быть больше IQ получает полный контроль над кэшем данных Файловая система Легче в управлении Дополнительные потери на операции чтения Файловая система не имеет представления о страницах IQ Устройства для Sybase IQ • Рекомендации по производительности – ПО для управления Логическими Томами использовать не рекомендуется – Для IQ Store используйте устройства бОльшего размера – Для IQ Temp Store cоздавайте несколько dbspace (IQ 12.7) или dbfiles (IQ 15) » Не менее 1-2 dbspace (dbfiles) на 1 CPU – Используйте «сырые» устройства для лучшей производительности • Работа с «сырыми» устройствами на Unix / Linux – Используйте «сим.линки» для «сырых» устройств. Это даст вам большую гибкость при переконфигурировании устройства Шаг 2: Оценить размер базы • IQ Store – 75% от общего размера исходных данных – Объем требуемого места зависит от нескольких факторов: Характер данных (повторяющиеся значения, типы данных) Количество и типы IQ-индексов, которые будут созданы – Пространства dbspace для IQ store впоследствии могут добавляться и удаляться по мере необходимости • IQ Temporary Store – обычно 20% от размера IQ Store – Размер под IQ Temporary Store зависит от: Количества HG индексов (перестраиваемых при загрузке данных) Количества активных пользователей Сложности пользовательских запросов – Пространства dbspace для IQ Temp Store впоследствии могут добавляться и удаляться по мере необходимости Шаг 3: Создать базу данных Можно использовать команду CREATE DATABASE в DBISQL или «мастер» в Sybase Central – Если вы используете DBISQL, подсоединитесь к серверу IQ и запустите скрипт Файлы, создаваемые при создании базы • dbspaces, создаваемые в процессе создания базы (на файловой системе) – имябазы.db – IQ catalog store – имябазы.iq* - IQ store – имябазы.iqtmp* - IQ temporary store • Другие объекты, создаваемые в процессе создания базы – имябазы.log – журнал транзакций – имябазы.iqmsg – IQ журнал сообщений Параметры создания базы • Следующие несколько слайдов посвящены наиболее важным для базы данных параметрам, многие из которых оказывают прямое влияние на производительность • Эти параметры нельзя изменить после того, как база создана – Отнеситесь к ним с осторожностью – Если параметры настроены некорректно, базу необходимо пересоздать Параметры создания базы • CASE – определяет чувствительность к регистру в запросах – По умолчанию, данные чувствительны к регистру (строчные и заглавные буквы различаются) – В базах данных, чувствительных к регистру, производительность выше • PAGE SIZE – размер страницы для catalog store – По умолчанию: 4096 байт (4K) – Варианты: 4096, 8192, 16384, 32768 – Для баз данных с очень широкими таблицами или с очень сложными запросами (длинные SQL-команды) может потребоваться увеличение размера страницы Параметры создания базы • COLLATION – последовательность сортировки, по умолчанию равна значению ISO_BINENG – Это та же последовательность, что и для набора символов ASCII (сначала заглавные потом строчные буквы) • JAVA – разрешение на хранимые процедуры на Java (по умолчанию ON) • JCONNECT – разрешение на подключение через JDBC (по умолчанию ON) IQ PAGE SIZE – какой размер выбрать? Определяющие факторы (также см. документацию) • Тип платформы (32 или 64 битных ОС) – для 32-битных OS -> 64K или 128K – для 64 битных OS -> 128K или больше (256K, 512K) • Количество памяти на машине (RAM) – Размер страницы IQ определяет размер «буфера» кэша IQ – Если страница IQ большого размера, то в кэше IQ поместится меньшее кол-во соответствующих «буферов» страниц • Размер базы и размер самой большой таблицы (# записей) – Чем больше база данных, тем больший размер рекомендуется для страницы IQ – Чем больше таблица, тем больший размер рекомендуется для страницы IQ • Количество конкурентных пользователей – Больше пользователей требуют большее число «буферов» ! Создание баз данных: Sybase Central Мастер создания баз данных будет запрашивать информацию, требуемую для создания базы Удаление базы данных • Удаляет базу данных и все ее содержимое Пример: DROP DATABASE ‘D:\\mydb\\mydb.db Удаляет базу данных mydb • Нужно указать имя файла базы, которое задавалось при создании – в операторе CREATE DATABASE • База данных должна быть остановлена перед удалением Проверка состояния базы - sp_iqstatus sp_iqstatus • Предоставляет детальную информацию о текущей базе данных – Информация о версии – Размер базы – Объем свободного места в IQ store и IQ temporary store • Пример на следующем слайде Проверка состояния базы - sp_iqstatus Другие полезные хранимые процедуры • sp_iqcheckdb – Проверка целостности текущей базы • sp_iqdbsize – Распечатка данных о размере текущей базы • sp_iqdbstatistics – Статистика по IQ store • sp_iqspaceused – Отображение информации о свободном и занятом месте в IQ Store и в IQ Temporary Store Конфигурирование сервера Модуль 5 Конфигурирование Сервера/ Базы • Каждый сервер и база IQ требуют конфигурирования • Конфигурирование сервера IQ: – Ключи командной строки во время старта сервера И/ИЛИ – Конфигурационный файл (.cfg файл) - передается со знаком ‘@’ Это предпочтительный метод старта сервера/базы данных Sybase Central при создании базы создает конфигурационный файл «по умолчанию» с названием ‘params.cfg’ • Конфигурирование базы данных: – Команда Set Option Конфигурирование сервера IQ • Конфигурирование сервера – Для управления поведением сервера IQ используют ключи – Ключи задаются в командной строке или в конфигурационном файле (.cfg), переданном со знаком ‘@’ Командная строка – start_iq server-switches database_file Конфигурационный файл – start_iq @params.cfg database_file Комбинация ключей и конфигурационного файла start_iq –n servername @params.cfg database_file Ключи для управления памятью IQ • Эти ключи конфигурационного файла IQ настраивают размер памяти, выделяемой под кэши IQ -iqmc = размер основного кэша Нужно задать размер основного кэша в MB, по умолчанию 16 MB -iqtc = размер временного кэша Нужно задать размер временного кэша в MB, по умолчанию 12MB • Позднее будет рассказано как правильно задать размер памяти Кэши IQ (кэши буферов IQ) •Основной кэш (MAIN CACHE) – Область памяти для буферов IQ Store – Используется совместно всеми пользователями •Временный кэш (TEMP CACHE) – Область памяти для буферов IQ Temporary Store – Используется совместно всеми пользователями •Примечание: –перед началом процесса загрузки данных размер для обоих кэшей должен быть выставлен Зачем нужно настраивать кэши? Размеры кэшей «по умолчанию» для реальной работы слишком малы • Размеры «по умолчанию» достаточны для запуска сервера, но для работы с реальными большими объемами данных они должны быть увеличены • Чем больше размер кэшей, тем меньше физического ввода/вывода, тем выше производительность – Кэши используются для всех операций дискового чтения/записи – Снижают объем физического ввода/вывода – Повышают производительность операции загрузки данных На время загрузки вам, возможно, понадобиться изменить пропорцию распределения памяти между основным и временным кэшами - для оптимизации загрузки таблиц с большим количеством индексов ОСНОВНОЙ кэш (Main Buffer Cache) • Инициализируется в момент старта базы • Размер по умолчанию для основного кэша - 16 MB – Это слишком мало для большинства приложений • После изменения этого параметра, необходимо выполнить перезапуск сервера IQ • Рекомендуемый стартовый размер - 40% общей памяти, доступной под сервер IQ – Расчеты и примеры приводятся дальше ВРЕМЕННЫЙ кэш (Temporary Buffer Cache) • Инициализируется во время старта базы • Этот кэш используется для выполнения операций группировки, сортировки, хэширования, и объединения в режиме ad-hoc • По умолчанию, размер этого кэша - 12 MB – Это очень мало для большинства приложений • После изменения этого параметра, необходим перезапуск сервера IQ • Рекомендуемый стартовый размер - 60% общей памяти, доступной для сервера IQ – Расчеты и примеры приводятся далее Просмотр размера кэшей Используйте команду sp_iqstatus Размер основного кэша IQ = 16MB Размер временного кэша IQ = 12MB Память и «Активные» пользователи • Каждый пользователь, подключающийся к серверу IQ увеличивает объем памяти, используемый процессом IQ – Память, используемая сервером IQ, увеличивается динамически, по мере увеличения числа подключенных пользователей • Каждый ‘активный’ пользователь увеличивает память, занимаемую сервером на 10MB – Активные пользователи исполняют запросы или загружают данные – Для бездействующих пользователей нужно меньше памяти (5MB на соединение) • Вам будет нужно оценить количество активных и количество подключенных пользователей, чтобы иметь возможность оценить общее количество памяти, необходимой вашему серверу Память под загрузку данных • Во время процесса загрузки данных из плоских файлов IQ требуется дополнительная память – Эта память используется для буферизации чтений с диска – IQ НЕ использует эту память для загрузки данных с других серверов, для операций UPDATE и DELETE • Объем необходимой памяти зависит от количества колонок и от ширины строки, а не от количества записей, которые необходимо загрузить • Эта память нужна IQ в дополнение к той, которая выделятся для работы серверного процесса IQ и для кэшей IQ – Память для загрузки контролирует опция базы данных LOAD_MEMORY_MB Опция LOAD_MEMORY_MB • Контролирует объем памяти, выделяемой под буферизацию чтений из файлов на диске в процессе загрузки таблиц • Каждая отдельная операция загрузки данных использует свои собственные буфера SET OPTION PUBLIC.LOAD_MEMORY_MB = 300 • Может быть задана как постоянный параметр, как временный параметр и для заданного пользователя – Может меняться динамически (не требуется перезагрузка сервера) – Используйте эту опцию, если в процессе загрузки вы увидели следующую ошибку памяти: ‘All virtual memory has been allocated’ (Вся виртуальная память занята) • Также, эта ошибка может возникнуть, если лимит для заданного пользователя слишком низок Основной и временный кэши IQ Размер кэшей определяется после того, как становится понятен размер оставшейся памяти . Рекомендуется поделить оставшуюся память между основным и временным кэшами в следующей пропорции: » 40% - на основной кэш » 60% - на временный кэш Эти значения – хорошая стартовая точка. Дальнейшая подгонка размеров кэшей выполняется в соответствии с характером вашего приложения Ключи для сетевых соединений Ключи конфигурационного файла IQ, управляющие параметрами сетевых коммуникаций • Параметр “–x” задает тип протокола, используемого для сетевых коммуникаций • по умолчанию это TCP/IP с портом 2638 -x tcpip(port=2640) Запустить сервер на порте 2640 -x tcpip(MyIP = 192.75.209.12:2637) Установить IP адрес и порт равный 2637 -x tcpip Использовать только TCP/IP с портом по умолчанию Опции базы данных IQ • Команда SET OPTION изменяет опции базы • Может изменить поведение базы как для всех пользователей, так и для заданного пользователя – Изменения могут быть временными и постоянными SET [TEMPORARY] OPTION [user_id. | PUBLIC.] option-name = [option-value] Опции базы данных IQ Область видимости и время действия • Область видимости определяет то, по отношению к кому применяется данная опция – PUBLIC – воздействует на всех пользователей – USER_ID – воздействует на отдельного пользователя группы Настройки для индивидуального пользователя перекрывают настройки, установленные с ключом PUBLIC • Время действия определяет длительность применяемой опции – Public – постоянная(или до тех пор пока не изменят) Разрешено устанавливать только DBA – Temporary – на время жизни сессии Перекрывает установку Public – Temporary … Public – постоянно, до тех пор пока сервер IQ не будет перегружен Разрешено устанавливать только DBA Опции базы данных IQ Опции для повышения производительности • Public.Force_No_Scroll_Cursors=‘On’; (по умолчанию ‘off’) – Установка в ‘On’ предотвращает кэширование результатов запросов пользователей – Выключает возможность прокручивания Result Set от начала к концу • Public.Query_Temp_Space_Limit = 0; (по умолчанию 2000 MB) – Ограничение в 2000 MB может быть слишком маленьким для некоторых пользователей – 0 снимает ограничения к объему памяти, выделяемой под временный кэш Проверка опций базы данных sp_iqcheckoptions Показывает любые опции базы данных, которые были изменены со значений по умолчанию Типы данных. Таблицы. Индексы. Модуль 6 Модуль 6 ТИПЫ ДАННЫХ Типы данных Sybase IQ • Поддерживается очень широкий спектр различных типов данных – Некоторые типы данных не поддерживаются через Open Client (isql) – Существует ряд ограничений между индексами IQ и типами данных • Для лучшей производительности и компрессии данных – Выбирайте наиболее эффективный тип данных для этой колонки Проверяйте количество байтов, необходимое для хранение каждого типа данных • Обратите особое внимание на следующие типы данных – Date / Datetime Используйте Date вместо Datetime если компонента «время» не используется – Numeric / Decimal Выбирайте разумное число знаков после запятой Типы данных IQ Тип данных ASIQ Диапазон Максимальное число знаков Размер (в байтах) CHAR(n) 1<=n<=32K-1 n/a Column Width CHARACTER(n) 1<=n<=32K-1 n/a Column Width VARCHAR(n) 1<=n<=32K-1 n/a Data Width CHARACTER VARYING(n) 1<=n<=32K-1 n/a Data Width INTEGER -2(^31)<=n<=2(^31)-1 10 4 ИЛИ –2,147,483,648 И 2147483647 UNSIGNED INT ОТ 0 ДО 4294967294 TINYINT 0<=n<=255 3 1 SMALLINT -2(^15)<=n<=2(^15)-1 5 2 ИЛИ ОТ -32,768 ДО 32,767 Типы данных IQ Типы данных ASIQ Диапазон Максимальное число знаков Размер (В байтах) BIGINT(n) -9.2(^18)<=N<=9.2(^18)-1 20 8 UNSIGNED ИЛИ BIGINT(n) ОТ 0 ДО 1.8(^19)-1 FLOAT(число знаков) Зависит от платформы 16 4 или 8 REAL(число знаков) Зависит от платформы 7 4 DATE Январь 1, 0001 - Декабрь 31, 9999 n/a 4 DATETIME 0001-01-01 00:00:00.000000 - n/a 8 SMALLDATETIME 9999-12-31 23:59:59.999999 TIMESTAMP Типы данных IQ Тип данных ASIQ Диапазон Максимальное число знаков Размер (в Байтах) TIME 00:00:00.000000 - n/a 8 -1038 -1038-1 126 От 2 до 69 DOUBLE 2.22(^-308) - 1.79(^308) 15 8 BIT 0, 1 n/a 1 bit MONEY 19 16 SMALLMONEY 10 8 BINARY (длина) n/a От 1 до 255 VARBINARY (длина) n/a От 1 до (32K – 1) n/a 36 23:59:59.999999 DECIMAL(p,s) NUMERIC(p,s) UNIQUEIDENTIFIERSTR 36 Пользовательские типы данных (UDT) Являются надстройкой над встроенными типами данных • Создаются командой CREATE DOMAIN CREATE DOMAIN имя_домена системный_тип • Также могут быть созданы при помощи хранимой процедуры sp_addtype sp_addtype имя_типа, системный_тип Хранение больших объектов (BLOB) • IQ поддерживает возможность хранения LOB данных (такая возможность является отдельной лицензируемой опцией). – Для этих целей используются типы данных LONG BINARY и LONG VARCHAR – Максимальный размер объекта напрямую связан с размером страницы IQ Максимальный размер LOB = Размер страницы IQ x 4GB • Данные типа BLOB могут только храниться в базе данных – Поиск по колонкам типа BLOB невозможен – Поддерживаются некоторые системные функции • Для типа данных LONG VARCHAR поддерживается функция SUBSTRING64 – Поиск по подстроке возможен – Поддерживается ряд системных функцй • См. «Large Objects Management» (Управление крупными объектами) в документации Sybase IQ Модуль 6 СОЗДАНИЕ ТАБЛИЦ Создание таблиц в базе данных IQ Команда CREATE TABLE • Ограничение UNIQUE (уникальное значение) – Не допускает ввода повторных значений в колонке или группе колонок – Создается уникальный HG индекс на колонке (колонках) • Ограничение PRIMARY KEY (первичный ключ) – То же самое что и констрейнт UNIQUE, но в таблице может быть задан только один PRIMARY KEY • Опция IQ UNIQUE (кардинальность колонки) – Задает примерное количество уникальных значений в колонке – Определяет тип FP индекса Команда CREATE TABLE • Ограничение CHECK (проверка) – Позволяет задать условия, которые должны быть проверены перед выполнением операций INSERT и UPDATE • Ограничение FOREIGN KEY (внешний ключ) – FK – это колонка (колонки) чьи значения являются подмножеством значений другой колонки (колонок) – Колонка (колонки), на которую идет ссылка должны быть либо основным ключом (Primary Key), либо для них должен быть задан констрейнт Unique – Для колонок типа Foreign Key создается неуникальный HG индекс Производительность запросов и PK, FK • Первичные ключи (Primary или Unique) являются критичными для производительности запросов – Оптимизатор использует ключи, чтобы определить взаимосвязь таблиц при выполнении операции join – Необходимо задавать констрейнты Primary или Unique в таблицах, используемых в операциях join В качестве ключей задавайте колонки, которые вы будете использовать для операций join • Для внешних ключей (Foreign Key) и других колонок нужен HG-индекс – Констрейнт Foreign Key создает HG-индекс – Констрейнт FK не является обязательным, - фактически он нужен только в том случае, когда есть проблема целостности реляционных данных Если вы не используете внешние ключи, создавайте HG-индекс на колонках, участвующих в операции join Создание таблицы в Sybase Central • Нажмите на иконку ‘New Table’ (новая таблица) в верхней части экрана • Нажмите правой кнопкой мышки на области экрана со списком таблиц и выберите New > Table (Новая > Таблица) Временные таблицы в IQ Глобальные и Локальные • Глобальные временные таблицы – Таблицы будут существовать в базе данных, до тех пор пока их не удалят – Каждый пользователь будет иметь свой собственный набор данных в такой таблице Строки будут видны только в рамках того соединения, в котором их добавили в таблицу Эти строки удаляются когда соединение закрывается • Локальные временные таблицы Другие команды для работы с таблицами • Просмотреть информацию о таблице sp_iqtable [table-name] • Изменить структуру таблицы ALTER TABLE [owner.] table-name etc. • Очистить таблицу TRUNCATE TABLE [owner.] table-name • Удалить таблицу DROP TABLE tablename •Полный синтаксис см. в документации Sybase IQ Модуль 6 ИНДЕКСЫ Индексы традиционных СУБД Многие базы данных используют индекс, построенный по принципу сбалансированного дерева (B-tree) Индексы IQ типа «битмап» • Bitmap представляет заданное значение в виде битовой маски (например: 0, 1) • Эффективно индексирует данные вне зависимости от их кардинальности • Легок в поддержке (нет необходимости в удалении и перестройке индексов) Особенности индексов Sybase IQ • Быстро строятся, быстро работают (для запросов) • Компактность – Требуют меньше дискового пространства чем традиционные B-tree индексы – Больше данных может находиться в памяти • Поколоночная структура хранения – Ключевой фактор для скорости обработки запросов • Выбор «правильного» индекса IQ делается на основании: – типа данных колонки, – кардинальности колонки – каким образом колонка будет использоваться в запросах • Каждый индекс (метод доступа) хранится и управляется по-своему • Вы можете последовательно добавлять, обновлять и удалять строки в таблицы IQ без перестройки индексов Работа индексов IQ в запросах • В отличие от реляционных баз данных, IQ использует все индексы, всех колонок, так или иначе участвующих в конструкциях sql-запроса: – в функциях - Count(), Count Distinct, Datepart – в JOIN таблиц – в аргументы поиска (SARG) в операторе Where – в GROUP BY • Для реализации среды, способной качественно справляться с любыми ad-hoc запросами, вам потребуется много индексов на в ваших таблицах Девять типов индексов Sybase IQ Индекс FP (Fast Projection, «Проекция») • Этот индекс создается автоматически, во время выполнения операции CREATE TABLE – Также известен как ‘Default Index’ (индекс по умолчанию) – Сервер создает индекс с названием ASIQ_IDX_..._FP – Может быть удален только при помощи команды Alter Table Drop <column> • Используется сервером IQ в большом количестве операций – Для выборки данных (проецировании) при операции SELECT – В поиске по шаблону – LIKE ‘%sys%’ – В вычислении выражений – SUM(A+B) – В операциях Join – устанавливает соответствия между значениями колонок • Единственный индекс, который может быть использован в колонках с типом данных BIT Как IQ хранит FP индексы • Существует 4 формы хранения FP-индексов – Форма хранения зависит от кардинальности колонки • “Плоский” FP индекс – Flat FP – Данные хранятся в той же форме, в какой они загружались (без оптимизации структуры хранения) – Сколько места потребуется для хранения определяется типом данных колонки Char(10) – 10 байтов, Integer – 4 байта, и т.п. • Оптимизированные FP индексы - FP(1),FP(2),FP(3) – Хранятся как 1, 2 или 3 байта – в зависимости от кардинальности колонки – Для оптимизации структуры хранения DBA должен включить специальную опцию IQ или для каждой колонки указать констрейнт IQ UNIQUE в команде Create Table Оптимизированный FP(1) – 1 байт • Входные данные конвертируются в 1 байт. • Далее, создается таблица соответствий, содержащая все уникальные значения и указатели на их расположение в таблице Оптимизированный FP(2) – 2 байта • Когда кардинальность составляет 255-65,536, данные сохраняются уже в двух байтах • Аналогично, создается таблица соответствий со всеми уникальными значениями Оптимизированный FP(3) – 3 байта IQ 15 • Появился в Sybase IQ 15 • Используется для данных с кардинальностью > 65,536 • Структура такая же, как у FP(1) и FP(2), за исключением: – Максимальный размер таблицы соответствий - 16,777,216 – Данные сохраняются в трех байтах • Так как размер колонки должен быть больше 3 байт, индекс FP(3) не может быть создан на – Bit, tinyint, smallint, char(<=3), varchar(<=3), binary(<=3), varbinary(<=3) • Типы Long Varchar и Long Varbinary не поддерживаются Плоский FP (Flat) Данные колонки сжимаются, но не оптимизируются В случае плоского FP индекса, данные хранятся в том же виде, в котором они загружены Continued … Опция колонки IQ UNIQUE() • IQ UNIQUE - это опция колонки в команде Create Table Create Table customer ( id char(10) NOT NULL IQ UNIQUE(3000) …) • Ее значение задает оценочную кардинальность колонки – < 256 - сервер попытается сохранить FP индекс в 1 байте – Между 256 и 65535 - попытается сохранить FP-индекс в 2 байтах – Между 65535 и 16 млн. - попытается сохранить FP-индекс в 3 байтах – > 16 млн (или опция IQ UNIQUE не задана) – данные будут сохранены в виде Плоского FP индекса • Значение, указанное в IQ UNIQUE служит только одной цели – определить тип создаваемого FP индекса, поэтому оно не обязательно должно быть точным Опция БД - Minimize_Storage • Когда эта опция включена (= 'ON‘) , команда Create Table будет автоматически выставлять значение IQ Unique(255) для всех колонок – Эта опция снимает необходимость добавления опции IQ UNIQUE для всех колонок в скриптах создания таблиц • Использование этой опции позволяет вам быть уверенными, что вы получите максимальное сжатие данных и наилучшую производительность запросов • Примечание: Существует ситуация, когда эта опция может вызвать проблемы производительности при загрузке данных. Это происходит когда производится первичная загрузка очень широкой таблицы (1000 колонок и более) и при этом приходится выполнять переформатирование из 2х- или 3х- байтового в плоский FP. Для таких таблиц эта опция должна быть выключена FP индексы и Загрузка данных • Ситуация: работает процесс массовой загрузки данных в таблицу, на которой созданы оптимизированные FP индексы • Что произойдет, если в процессе загрузки выяснится, что значение, заданное в IQ Unique() неверно? – однобайтный FP преобразуется в двухбайтный FP индекс без потерь производительности – Двухбайтный FP преобразуется в трехбайтный FP индекс, если достаточно свободного кэша памяти – Трехбайтный FP будет полностью переформирован - в плоский FP индекс • Трансформация FP(2) или FP(3) индекса – в плоский FP – – – – Потери в производительности будут, но это разовая «неприятность» Будут перестроены страницы данных для этой колонки Это произойдет “на лету” и только один раз Эта процедура не повлияет на последующие загрузки Формат хранение FP индекса • Эффективное хранение FP индекса является критичным для скорости запросов и степени сжатия данных – Эти индексы используются оптимизатором Sybase IQ – Это может существенно уменьшить дисковое пространство, занимаемое колонкой – Существенно снизится дисковый ввод/вывод во время исполнения запросов • Перед началом создания таблиц DBA и команда разработчиков должны четко осознавать важность и степень влияния оптимизированных (1,2,3 байтных) FP индексов на систему – Даже несколько неправильно настроенных колонок могут существенно ухудшить производительность Быстрые индексы (LF и HG) • Эти индексы хранят информацию о кардинальности колонки и распределении данных – Используются оптимизатором запросов IQ для формирования планов запросов • LF и HG индексы являются критичными для производительности запросов – LF индекс рекомендуется для колонок с низкой кардинальностью – HG индекс рекомендуется для колонок с высокой кардинальностью, а также для колонок-ключей и колонок, участвующих в операции join • Оба типа индексов представляют собой структуры B-Tree – LF и HG – это единственные индексы, которые могут быть уникальными Индекс Low Fast (LF) B-Tree + Bitmap для данных с низкой кардинальностью • Для обработки запросов используется набор битовых карт, построенных для каждого уникального значения (для регулярного LF) • Лучше всего подходит для колонок с небольшим количеством уникальных значений (<1500) Использование индекса LF • LF индекс является критичным для следующих типов операций: – Аргументы Поиска (SARG) в предложении WHERE: равенство (=), неравенство (!=), операторы IN и NOT IN – Аргументы агрегативных функций MIN(), MAX(), COUNT(), COUNT DISTINCT – Group By, Order By • LF индекс также рекомендуется для запросов по диапазону – >, <, >=, Between, Not Between) Подробнее об индексе LF • Каждое конкретное значение колонки сохраняется в цепочке страниц – Нули не хранятся, хранятся только ‘1’ (true) биты • Повторяющиеся значения сжимаются – LF это ‘дешевый’ индекс для данных с низкой кардинальностью • Максимальная рекомендуемая кардинальность - 1500 – Структуры B-Tree начинают «раздуваться» при повышении кардинальности – Если при загрузке данных будет зафиксировано более 9 999 уникальных значений, загрузка ОСТАНОВИТСЯ и произойдет откат назад Индекс High Group (HG) B-Tree + Групповой массив (G-Array) Расширенный B-tree индекс. Для операций Join, операций сравнения (=, !=) и Group By Подробнее об индексе HG • В листьях этого B-tree хранится уникальное значение колонки и указатель на цепочку страниц, содержащую номера строк (ROW ID) для этого значения – Уникальный HG индекс хранит ROW ID прямо в своих страницахлистьях. Поэтому цепочек страниц в этом случае просто нет. • HG индекс – это единственный индекс, который может быть составным (задаваться для нескольких колонок сразу) – Оптимизатор IQ НЕ использует составные HG индексы для поиска по отдельной колонке в индексе • HG индекс требует памяти Temp Memory и места в Temp Store – для быстрой загрузки HG индекса необходимо иметь Temp-кэш достаточного размера HG индекс в запросах HG индекс рекомендуется для следующих операций: • ВСЕ колонки, являющиеся КЛЮЧАМИ, или по которым происходит JOIN таблиц (независимо от кардинальности) • Аргументы Поиска (SARG) в предложении WHERE =, !=, IN, >, <, >=, <=, BETWEEN • GROUP BY • Выражения SELECT DISTINCT, COUNT DISTINCT Индекс High Non Group (HNG) Bit-Wise Индекс. Оптимизирован для операций Поиска по диапазону и агрегатных функций Пример: • SELECT SUM(sales) FROM customer (2 * 64) + (3 * 32) + (2 * 16) + (1 * 8) + (3 * 4) + (2 * 2) + (3 * 1) = 283 HNG Индекс Разработан для запросов, где операции поиска по диапазону или функции агрегации используются для колонок с высокой кардинальностью Исключение: » колонки типа Date/Datetime » колонки с оптимизированным FP индексом Не может быть объявлен как уникальный (Unique) Не может быть составным (для нескольких колонок) • Идеален для колонок, используемых в операциях: – Поиска по диапазону – BETWEEN – Функциях Min(), Max(), Sum(), Avg() Подробнее об индексе HNG • Индекс HNG хорошо сжимается и быстро строится • Важность этого индекса несколько уменьшилась после появления в IQ других новых типов индексов – Индексы DATE/DATETIME работают быстрее на запросах по диапазону для данных типа DATE и DATETIME – Оптимизированный FP индекс может работать быстрее на запросах по диапазону, потому что он может использовать многопоточность в процессе поиска • Рекомендация – Использовать HNG индекс только для колонок с очень высокой кардинальностью (> 65 536 уникальных значений) Индекс Compare (CMP) Этот индекс IQ используется для сравнения данных двух колонок одной и той же таблицы • Набор битовых масок, хранящих бинарный результат сравнения (>, <, =) двух колонок одной и той же таблицы • Обе колонки должны иметь одинаковый тип данных (включая разрядность и количество знаков после запятой) Индекс CMP • Для этого индекса не поддерживаются типы данных: – Bit, Float, Real, и Double • Используется для выполнения следующих операций в операторе Where <, =, >, <=, >= • Примеры данных колонок: – Цена продажи, Цена прайслиста – ID сотрудника, ID менеджера – Date / Datetime Подробнее об индексе CMP • CMP – это индекс, который быстро строится и не требует много места для хранения • Пользователи IQ сравнительно редко используют этот индекс – Это обусловлено ограничениями индекса (обе колонки должны быть в одной таблице и одного и того же типа данных) • Также, при создании CMP индекса обе колонки становятся обязательными для вставки значения – Эквивалентно созданию колонки со свойством NOT NULL Индекс Word (WD) • Индекс WD предоставляет самый быстрый способ работы с данными, представляющими собой «список слов» – Применение ограничено типами данных Char() и Varchar() • ‘Слова’ разделяются пробелами, знаками препинания, специальными символами – По умолчанию разделителем считается любой символ, не принадлежащий к алфавитно-цифровому ряду за исключением: Дефис (-) и одинарная кавычка (') • Используется для операций поиска, где в операторе WHERE содержится – Ключевое слово ‘CONTAINS’, или – Оператор LIKE (необходимы разделители, например: like ‘% <поисковое_слово>%’) Индекс WD Пример WD индекса применительно к колонке «Адрес»: Пример запроса: Select count(*) from customer where address contains (‘Main’) Подробнее об индексе WD • Индекс WD в чем-то похож на индекс HG – Требует дополнительных ресурсов при загрузке – Требует много места для хранения • Важно понимать, в каких случаях следует использовать индекс WD – Поиск должен осуществляться по целому слову – Предикаты, в которых используется только часть слова и шаблон поиска (like ‘%олок%’ – «молоко»), не используют WD индекс Индексы DATE, TIME и DTTM Три типа индексов для обработки запросов, включающих в себя работу с данными типа Date, Time, Datetime • Индекс DATE предназначен только для колонок типа DATE и используется для обработки запросов, включающих в себя работу с датой • Индекс TIME предназначен только для колонок типа TIME и используется для обработки запросов, включающих в себя работу со временем • Индекс DTTM предназначен только для колонок типа DATETIME или TIMESTAMP используется для обработки запросов, включающих в себя работу с датой-временем Индексы DATE, TIME и DTTM Индекс День Месяц Год Час Минута Сек. День недели Квартал года Неделя года DTTM DATE TIME Индексы DATE, TIME и DTTM • Используйте DATE, TIME, или DTTM в следующих случаях: – Запросы по диапазону (>, <, >=, <=, BETWEEN) – Запросы с функцией DATEPART использующие операторы равенства (= !=) • Ограничения: – Индексы не могут быть объявлены уникальными – Могут быть созданы только для индивидуальной колонки – Не поддерживают следующие функции Datepart Calyearofweek, Dayofyear, Millisecond Подробнее о DATE, TIME и DTTM • Как и в случае с HNG индексом, запросы по диапазону для соответствующих типов данных могут быть быстрее, с использованием оптимизированного FP индекса – Поиск с использованием оптимизированного FP индекса может быть многопоточным • Возможно, нет смысла стоит строить эти индексы, если на колонке есть оптимизированный FP индекс и он используется Оптимизатором – Протестируйте время исполнения запроса с этими индексами и без них – Перестройка этих индексов происходит быстро Общий алгоритм для выбора индексов 8 шагов 1. По умолчанию, после создания таблицы (CREATE TABLE) все колонки получают FP индекс 2. Определите колонки, которые будут использоваться • в операциях JOIN 3. Определите колонки с небольшим количеством уникальных значений (<1500), которые используются: • в функциях внутри выражения SELECT • как предикаты в операторе WHERE • в GROUP BY FASTPROJECTION HIGHGROUP LOWFAST 4. Определите колонки с большим количеством уникальных значений (>1500), которые используются: • в выражении SELECT в функциях • как предикаты в операторе WHERE • в GROUP BY HIGHGROUP Общий алгоритм для выбора индексов 8 шагов (продолжение) 5. Определите колонки с типом данных Дата или Время и использующиеся в • Сравнениях BETWEEN или RANGE DATE,TIME,DTTM 6. Определите колонки, использующиеся в: • Сравнениях BETWEEN или RANGE • функциях AVG и SUM HIGHNONGROUP 7. Определите колонки, из одной и той же таблицы, которые могут участвовать в операциях сравнения: >,<,= 8. Определите колонки, которые могут использоваться в операциях поиска с предикатами ‘CONTAINS’ или ‘LIKE’ COMPARE WORD Допустимые комбинации индексов • Комбинации, которые имеют смысл, помечены * Загрузка данных Модуль 7 Источники данных Sybase IQ может осуществлять Вставку (insert) или Загрузку (load) данных в таблицы из следующих источников: • Плоские файлы – Фиксированной ширины – Переменной ширины • Именованные каналы (Named pipes) • Таблицы внешних СУБД (Sybase ASE, Microsoft, Oracle, IBM DB2) • Таблицы самой Sybase IQ • Прямой ввод данных (insert A, insert B, …) • Продукты ETL – Sybase ETL (Solonde), а также популярные инструменты третьих фирм: Informatica, Datastage, и др. • Репликация Sybase Replication Server – Real-Time Loading Загрузка таблиц • LOAD TABLE – Загружает данные из файлов или из именованных каналов • INSERT FROM SELECT – Загружает данные из таблицы в таблицу в той же базе IQ • INSERT … LOCATION – Загружает данные из таблиц другого сервера в таблицы IQ • CIS и INSERT FROM SELECT – Загружает данные из таблиц другого сервера в таблицы IQ • INSERT VALUES – ‘ручная’ вставка данных в колонки IQ • Утилита iq_bcp (только в версии IQ 12.7) – Загружает данные из файлов LOAD TABLE • Позволяет осуществлять массовую загрузку данных в отдельную таблицу, из плоских файлов или именованных каналов, содержащих текстовые(ASCII) или бинарные данные – Это самый быстрый метод загрузки данных в таблицу • Позволяет добавлять данные к существующим строкам таблицы – По умолчанию, сначала заполняет пустые строки таблицы, затем добавляет новые строки – Не изменяет содержимого существующих строк • Включает опции, позволяющие обрабатывать ошибки загрузки данных и переносить не прошедшие загрузку строки в специальный файл ОС • Пользователь, загружающий данные, должен обладать правами на выполнение команды LOAD TABLE для данной таблицы Загрузка и блокировка данных • Sybase IQ накладывает эксклюзивную DML блокировку таблицы на запись для команд LOAD TABLE, INSERT, UPDATE и DELETE • Влияние DML блокировки – В то время, когда кто-то загружает, вставляет или модифицирует данные таблицы, другие пользователи могут продолжать выполнять запросы к той же таблице – Операции по загрузке/изменению данных могут выполнятся несколькими пользователями одновременно Но они должны модифицировать разные таблицы – Если пользователи попытаются одновременно изменять данные одной и той же таблицы, «победит» тот, кто успел первым поставить DML блокировку Другие пользователи получат сообщение об ошибке Синтаксис команды LOAD TABLE LOAD [ INTO ] TABLE [ owner ].table-name ... ( load-specification [, ...] ) ... [ FROM | USING [CLIENT] FILE ] { 'filename-string' | filename-variable } [, ...] ... [ CHECK CONSTRAINTS { ON | OFF } IGNORE CONSTRAINT constrainttype[, ...] ] ... QUOTES OFF ... ESCAPES OFF ... [ FORMAT { 'ascii' | 'binary‘ | ‘bcp’ } ] ... [ DELIMITED BY 'string' ] ... [ STRIP { ON | OFF } ] ... [ WITH CHECKPOINT { ON | OFF } ] ... [ { BLOCK FACTOR number | BLOCK SIZE number } ] ... [ BYTE ORDER { NATIVE | HIGH | LOW } ] ... [ LIMIT number-of-rows ] ... [ NOTIFY number-of-rows ] ... [ ON FILE ERROR { ROLLBACK | FINISH | CONTINUE} ] ... [ PREVIEW { ON | OFF } ] ... [ ROW DELIMITED BY 'delimiter-string' ] ... [ SKIP number-of-rows ] ... [ START ROW ID number ] ... [ UNLOAD FORMAT ] ... [ IGNORE CONSTRAINT constrainttype [, ...] ] ... [ MESSAGE LOG ‘string’ ROW LOG ‘string’ [ ONLY LOG logwhat [, ...] ] ... [ LOG DELIMITED BY ‘string’ ] Команда LOAD TABLE Содержит три части: • Спецификации колонок и формата их загрузки – Описывает каждую загружаемую колонку и формат соответствующих данных во входном файле • Оператор FROM – Описывает входной файл (файлы), который должны быть загружен – В IQ 15 “FROM” больше не используется • Опции загрузки – Дальнейшее описание набора входных данных – Контроль поведения операции загрузки Спецификации колонок • Определяет колонки таблицы, которые должны быть загружены • Описывает раскладку входного файла с помощью спецификаторов колонок – Задает длину (для полей фиксированной длины) или указывает разделитель (для полей переменной длины) Либо можно указать глобальный разделитель в блоке опций загрузки – Задает формат для входных данных типа Date, Time или Datetime – Задает, какие строковые значения входных данных должны быть интерпретированы как NULL – Указывает, какие части входного файла должны быть проигнорированы (используя FILLER) • Для корректного составления спецификации загрузки, нужно внимательно просчитать каждый загружаемый байт файла данных Пример: Загрузка из текстового файла • Данные переменной длины, Разделитель – вертикальная черта (кроме последнего поля) LOAD TABLE customer (customer_id '|', cust_type '|', organization '|', contact_name '|', contact_phone '|', address '|', city '|', state_province '|', postalcode '|', country '\x0a' ) FROM '/work/data/customer1.dat' ESCAPES OFF QUOTES OFF; Оператор FROM 12.7 • Определяет входной файл(ы) /именованный канал(ы), который должен быть загружен – Путь задается относительно машины, на которой находится сервер Sybase IQ FROM 'filename-string' [,…] • filename-string передается серверу как строка – Имя файла может быть именованным каналом(Named Pipe) – Для корректного задания пути к директории на Windows, обратная косая черта (\) должна быть представлена в виде двух косых черт (\\) • Пример загрузки FROM ‘C:\\iqdata\\input.dat' Оператор USING FILE IQ 15 • Определяет входной файл(ы), который должен быть загружен – Путь задается относительно машины, на которой находится сервер Sybase IQ USING [CLIENT] FILE 'filename-string' [,…] • filename-string передается серверу как строка – Исходный файл может находиться на клиентской машине – Исходный файл может находиться на серверной машине Sybase IQ – Для корректного задания пути к директории на Windows, обратная косая черта (\) должна быть представлена в виде двух косых черт (\\) • Пример загрузки локального файла, расположенного на том же сервере, где работает и сам сервер Sybase IQ: – USING FILE ‘C:\\iqdata\\input.dat' Загрузка из нескольких входных файлов Позволяет загрузить большой объем входных данных в один этап Загрузка из нескольких файлов • Когда есть множество файлов, которые нужно загрузить в таблицу, лучше выполнить эту загрузку в одной транзакции – Эта техника гораздо быстрее, чем загрузка и подтверждение транзакции для каждого отдельного файла • В команде LOAD TABLE нужно задать все входные файлы в операторе from – Используйте опцию ON FILE ERROR для контроля поведения загрузки, в случае, если система не может получить доступ к входному файлу Обработка проблем загрузки данных в команде LOAD TABLE • Выполнение команды LOAD TABLE остановится (выполнится откат) in в каждой из следующих ситуаций: – Повторение первичного или повторение уникального ключа – Внешний ключ не найден в таблице, на которую он ссылается – Ошибки преобразования данных • В команде LOAD TABLE есть дополнительный синтаксис для : – Возможности отбросить входные строки , нарушающие какие-то ограничения (Primary Key и т.п.) или не проходящие по формату, и продолжить загрузку – Задания предельного количества нарушений ограничений (constraints) перед тем, как начать откат операции загрузки – Журналирования всех возникших ошибок – Создания «файла отказов», куда будут помещены все отброшенные записи Рекомендации по загрузке • Использовать команду LOAD TABLE для загрузки из файлов – Стараться выполнять загрузку всех файлов в одной транзакции • Располагать файлы для загрузки на отдельном диске (отдельном от дисков базы данных) • Создавать все индексы IQ до загрузки данных • Настраивать память под загрузку – Использовать опцию LOAD_MEMORY_MB для ограничения размера кучи (heap size) – Правильно настроить IQ Temp Cache для HG индексов • Выполнять загрузку в часы наименьшей нагрузки на сервер – Для загрузки больших объемов данных рассмотреть возможность использования IQ Multiplex и выделенного узла «Писателя» Вставка данных • Команда INSERT from SELECT – Позволяет выполнить массовую вставку в таблицу результатов, полученных от выполнения оператора SELECT из таблицы в той же базе данных • Команда INSERT from SELECT (другой сервер / база данных) - CIS – Позволяет осуществить выборку строк для вставки из другой базы данных. • Команда INSERT …. LOCATION – Выполняет вставку непосредственно из удаленной базы данных • Команда INSERT VALUES – Вставка одной строки с заданными значениями Удаление данных • Выражение DELETE – Удаляет данные в соответствии с заданными критериями • DROP TABLE – Полностью удаляет таблицу, вместе с ее данными и индексами • TRUNCATE TABLE – Удаляет все строки из таблицы Изменение данных • Команда UPDATE – Используется для модификации данных таблицы – Это может быть основная или временная таблица Архитектура загрузки ETL инструментом FTP Плоские файлы ODBC ETL Сервер FTP DB API Sybase IQ База данных IQ Реляционные базы - источники Разделяемые файлы •UNIX NFS Mount •Windows Network Drive Client-side Load Плоские файлы Server-side Load Плоские файлы Sybase IQ 15.2 + Replication Server 15.5 = Real-time loading Fast Loading Sybase IQ 15.2 now delivers: − Flexibility via Sybase ETL data transformation and load capability, − Speed via Sybase Replication Server’s Real-Time Loading capability. Oracle DB2 Sybase ETL • ASE Replication Server Businesses demand fast, flexible access to missioncritical information. Sybase IQ Data Transformation Needed for: Replication Server – Real Time Loading Edition 15.5 now supports both batch and continuous data movement from ASE to Sybase IQ • Real-time data access for customer service, troubleshooting, order fulfillment, other just-in-time reporting Sybase ETL 4.9 with CDC capability using Replication Server as CDC agent provides realtime data loading Sybase ETL 4.9 provides upsert (micro-batching) capability for data from other sources REAL-TIME LOADING PERFORMANCE DB DBon RS PUB SUBon DSon (IQ) DS (ASE) SUBoff DBoff DSoff (IQ) • • Use design partner data and transactions at primary DB – Replicate data to DBon with RTL on – Replicate data to DBoff with RTL off Show performance difference between DBon and DBoff REAL-TIME LOADING PERFORMANCE • TEST DATA – Two tables (56 columns and 13 columns) – 685MB log size generated by captured design partner transactions – 6,937 Transactions with 1,192,642 CMDs (172 CMD/Tran) • Largest transaction has 289,532 commands • 91% inserts, 8% deletes, and 1% updates Использование iq_bcp 12.7 • Клиентская утилита для загрузки данных в IQ – Доступна только в версии IQ 12.7 • Альтернатива серверному механизму массовой загрузки (LOAD TABLE) • В настоящее время имеет ряд ограничений – Не задействуют механизм массовой загрузки IQ – Осуществляет вставку данных в виде пакета “insert” предложений – Быстрее чем вставка одной строки, но даже близко не сравнима по скорости с операциями LOAD TABLE и INSERT FROM LOCATION Работа с Sybase IQ Модуль 8 dbisql и dbisqlc • Обе утилиты поставляются с серверным и клиентским программным обеспечением IQ – ODBC драйвер для Sybase IQ включен в дистрибутив IQ • DBISQL (Interactive SQL Java) – более предпочтительный клиент – Лучше использовать его (кроме случаев, когда документация явно рекомендует что-то другое) – Обладает более удобным пользовательским интерфейсом и более широким функционалом Возможность поиска сервера Сохраняет историю введенных SQL запросов Поддержка кнопок мыши под Unix Возможность выполнять операции копирования и вставки Sybase Central • Предоставляет графический интерфейс для администрирования сервера IQ – Большинство операций по администрированию IQ может быть выполнено при помощи SQL команд – Одним из исключений является создание кластера IQ Multiplex. Для этого используйте Sybase Central. • Позволяет подключать «плагины» других серверных продуктов Sybase Возможности Sybase Central • • • • • Создание баз данных Старт и остановка сервера Управление пользователями/группами и их правами Добавление/удаление dbspace Администрирование кластера Multiplex • Далее следует краткий обзор некоторых его функций Sybase Central – Подключение к IQ • Из строки меню, пункт Tools Ручное соединение, используя ‘Connect’ Создание «Профиля» для соединения (Connection profile) – для более быстрого доступа к базе IQ Регистрация плагинов других серверных продуктов, используя пункт меню ‘Plug-ins’ • Соединение с сервером, используя ODBC или JDBC Использует такой же диалог для подключения, что и в клиенте dbisql Навигация по Sybase Central Соединиться – Отсоединиться – Профайлы – Обновить - Свойства Тулбар Плагин IQ Имя сервера «Бочка» базы данных Папки разных объектов базы данных Нажмите правой кнопкой мыши на этой панели для отображения возможных действий Свойства таблицы • Нажмите правой кнопкой мыши на таблице, чтобы открыть ее свойства • Закладка Columns отображает информацию, касающуюся колонок Тип FP индекса, плотность • Закладка Placement отображает размер индексов и местоположение dbspace Свойства колонок таблицы Язык SQL в Sybase IQ • Соответствует стандартам ANSI SQL 92/99 • Поддерживает функции и команды, не входящие в стандарт ANSI – Это так называемые ‘расширения поставщика’ для ANSI SQL • Совместимость с другими серверными продуктами Sybase – В хранимых процедурах используется тот же T-SQL и Watcom SQL что и в ASA Существует ряд различий между ASE T-SQL и ASA T-SQL – Существует ряд различий в поведении при использовании соединения через Open Client и других соединений (ODBC, JDBC и т.п.) Соединение Open Client не соответствует стандарту ANSI Экспорт данных из Sybase IQ • Экспорт данных производится командой SELECT, используя опции TEMP_EXTRACT Экспортирует данные в файл на той машине, где работает Sybase IQ Server Может выводить данные в несколько файлов параллельно (максимум 8) Это самый быстрый метод экспорта данных • Перенаправление, используя команду SELECT и значок “>#” Экспортирует данные в файл на клиентской машине • Внешняя утилита: iq_bcp { in | out } только для IQ 12.7 В $ASDIR/bin – там где располагаются бинарные файлы сервера IQ ВОПРОСЫ и ОТВЕТЫ 174 – Sybase Confidential – February 13, 2009 Quick Start ВВЕДЕНИЕ в SYBASE IQ Обзорный тренинг Андрей Хромов, технический консультант, Sybase CIS Москва, 4 июня, 2010 176 – Sybase Confidential – February 13, 2009