本稿はデータベースソフトウェア「SQL Anywhere」およびデータベース全般に関する英語ドキュメントを翻訳する形で提供しています。図など、部分的に英語のままになっていますが、製品のSQL Anywhere自体は完全に日本語化されていますのでご安心ください。
長年SQL Anywhereを利用してきたユーザーの多くが、古いバーション(とりわけ2003年7月にリリースされたAdaptive Server Anywhere 9)を使い続けているようです。そこでこの投稿では、Adaptive Server Anywhere 9にはなくて、SQL Anywhere 12にはあるSQL Anywhereサーバーの機能について簡単にまとめたいと思います。下記のリストがすべてを網羅するわけではありませんが、ここ数年の間にどれほど多くの新技術がSQL Anywhereに導入されてきたか、おわかりになると思います。
クエリ処理の改善
- マルチプログラミングレベルの動的な調整。これにより、サーバーの負荷に応じてワーカースレッドの数を動的に調整できる
- スナップショットアイソレーションのサポート(マルチバージョンコンカレンシーコントロール、MVCCとも呼ばれる)
- マルチCPUのSMPハードウェアを有効活用するクエリ内並列処理
- Javaに加え、共通言語ランタイム(CLR)の外部関数のサポート
- 必要条件別に2パターンのインメモリ動作をサポート
- 行レベルのインテントロックをサポート。FK-PKリレーションにおける外部ローのアップデートに対するロック機能を改善
- インデックスオンリー検索。クエリ時に、常にベーステーブルページにアクセスするのではなく、インデックスのみを使って返答できる
- インデックスインターセクションとインデックスユニオン。2つ以上のインデックスを組み合わせることで検索条件の述部の結合または分解に対応
- クエリ最適化の各種機能の強化により、アクセスプランの性能が向上
- 自己修復機能を備えた統計管理。不正確な選択性の推定を検出し、DBAの介入なしにその場で先行修正が可能
- インデックスのクラスタ化分析。これにより、オプティマイザはインデックススキャンにかかるコストをより正確に推定できる
- マテリアライズドビューのサポート。セレクト、プロジェクト、内部ジョイン、外部ジョイン、さらにグループビューに基づくバッチ更新マテリアライズドビューおよび即時マテリアライズドビューをサポート
- SELECT文を含むすべてのDML文のプランキャッシュをサポート
- INリストの述部の最適化と処理の改善
- スケーラビリティとトランザクションログ処理の向上
- 評価式仮想マシンの実装によりサーバー内での式評価を最適化
- FROM句で使用されるストアドプロシージャのインライン化(SQLユーザー定義関数も含む)。これにより、場合によってはプロシージャのコンテキストを完全に取り除くことも可能
- 述部最適化機能の改良により、より効果的なアクセスプランの作成に役立つ遷移条件を検出可能
- メモリガバナーによって、メモリ消費量の多いSQL要求の実行をより効果的にコントロール
- SQLリクエストのI/O条件に応じたワーカースレッドの自動調整
SQL言語のサポート
- 全文検索をサポート。あらゆるタイプのカラムにまたがる全文インデックスを作成し、CONTAINS述部にGoogleのような検索構文を用いることで、探している値がインデックス内のどこにあっても見つけ出すことができる。近接・類似マッチのサポートおよび文字列フィルタのためのAPIをサポート。どのタイプのデータもインデックス可能
- インデックス機能付きの空間データ(平面型および球体地球型)のサポート。またオラクルを含む、空間データに対応した他のデータベース管理システムとのMobilink同期をサポート
- 各国語キャラクタセット(NCHAR)のデータをサポート
- MERGE文のサポート
- SEQUENCE式に加え、AUTOINCREMENT式またはIDENTITY式もサポート
- BIT VARYINGデータタイプとそれに関連する組み込み関数
- APPLYテーブル式およびOUTER APPLYテーブル式
- SIMILAR述部とREGEXP述部を使った正規表現検索のサポート
- FIRST_VALUEとLAST_VALUEのウィンドウ関数
- MEDIAN集計関数
- ビューの依存関係の追跡と管理
- UPDATE文、INSERT文、MERGE文、またはDELETE文におけるSELECT文の使用をサポート。これにより、トリガの起動なしにデータベースの変更内容の結果セットが生成される
- コネクションのオプション設定をオーバーライドする、DML文でのOPTION句の使用
- ビューを更新時に起動されるINSTEAD OFトリガのサポート
- DDL文に使われるCREATE OR REPLACE構文と IF NOT EXISTS構文
- サブクエリを含めたあらゆるSELECTブロック内でのORDER BY句およびSELECT TOP Nのサポート
- OPENSTRING機能では、指定されたスキーマを使って文字列式をローの集合として扱い、FROM句内でそれらのローを照会することが可能
- IS [NOT] DISTINCT FROM述部のサポート
- IS NOT OF ( [ ONLY ] type ) 述部のサポート
- MySQLのようなLIMITキーワードおよびOFFSETキーワードのサポート
データ管理の機能改善
- データベースのミラーリングによる高可用性のサポート
- 負荷の増加に対処するためにリードオンリーでのデータベースのスケールアウトをサポート。自動負荷分散機能も搭載
- LOAD TABLE文とCREATE INDEX文のパフォーマンス向上
- 並列バックアップ
- データベース検証時のパフォーマンスの大幅改善
- インデックスの自動圧縮
- 二次インデックスに含まれるNULL値処理のカスタム化をサポート
- LOAD TABLE FROM CLIENT FILEをサポート。これによりLOAD TABLEはクライアント側から直接データをロード可能
- 圧縮カラムのサポート
- 長い値を含む行の物理的レイアウトのカスタム化をサポート(INLINEキーワードおよびPREFIXキーワードを使用)
- 初期データベースのサイズの縮小(特にWindows CE環境)
- 参照整合性制約での代替的MATCH句をサポート
- 外部キー宣言でのUNIQUE句をサポート。これにより、個別のユニークインデックスがなくても1対1のリレーションが可能
- プライマリーキーと外部キーのカラムの順序をインデックス化の必要条件に合わせて調整可能
- グローバル共有テンポラリテーブルの作成が可能
- テーブルごとの暗号化をサポート
アプリケーションプロファイリング
-
アプリケーションプロファイリングにより、アプリケーション使用時のサーバーのパフォーマンスに関する情報を収集できる(サーバーが別のマシン上、さらにはWindows CEデバイス上にあっても実行可能)。以下の機能を含む
- インデックスコンサルタントとの統合
- システムが陥りやすい問題を指摘するウィザード
- アクセスプランをCE上のサーバーから取り出し、デスクトップマシンで分析する機能