Quantcast
Channel: SQL Anywhere Japan
Viewing all 49 articles
Browse latest View live

過去のブログ記事より : SQL Anywhere における 自己治癒統計

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2015/02/04/from-the-archives-self-healing-statistics-in-sql-anywhere

 

 

 

 

この記事のオリジナルは、Glenn Paulleyが sybase.com に2009年11月に掲載したものです。この中で、Glenn は SQL Anywhere がデータベース管理者によるデータベースパフォーマンスのチューニングの必要なく動作するキーとなる機能、SQL Anywhere の統計管理の機能について語っています。



SQL Anywhereは、1992年 [1] から自動の自己管理の統計収集を提供しています。SQL Anywhere 12 では、さらに一歩進んで、SQL Anywhere のカラムヒストグラムを自己監視かつ自己治癒する統計ガバナーを実装しました。SQL Anywhere 12 における自己治癒統計管理には、以下が含まれます。

 

  • クエリーの選択度推定エラーの記録とカテゴライズ
  • 低オーバーヘッドでの統計エラーの自動・自律補正
  • カラムヒストグラムのメンテナビリティーの自律監視と自律検出

 

 

エラーの特定

 

SQL Anywhere 12 では、サーバーはクエリー処理中の全サーチ条件における各述部と推定エラーの総計を監視します。

実際の選択度と推定選択度間の差は、不要な補正を避けるため、選択度が小さいエラーにはバイアスがかけられています。

この調整されたエラーで、サーバーは、そのカラムの述部の数とエラーの総数をベースにして各カラムヒストグラムのエラーメトリックを計算します。

このメトリックは、推定値と実際の値と間に大きな差が出る述部に好意的にバイアスがかけられ、エラーが20%から30%の間の場合にはステップ機能を含むように、また、エラーが35%より大きい場合には別のステップを含むようにします。

もし、計算されたメトリックがスレッシュホールドの値よりも大きい場合、そしてサーバーがそのカラムを含む述部に20よりも多く遭遇した場合、そのカラムヒストグラムは、補正候補として考えられます。

 

 

カラムヒストグラムの補正

 

サーバーがあるカラムヒストグラムに補正が必要だと決定した後、サーバーが自由に試みられる問題修正の方法は3つあります。

それらは、(試みる順番に):

 

  1. 同じテーブルのデータへ他のクエリーを投げた際のカラム統計をピギーバックする;
  2. (インデックスがはられたカラムは)インデックス統計を使用して一からカラムヒストグラムを再作成する; そして
  3. Daemonプロセスを使用していて、サーバーが比較的アイドルな状態の間、自動でテーブルのサンプリングスキャンを実行する。

 

(1) で、サーバーは他のクエリーからのスキャンオペレーターを利用してカラム統計を収集しようと試みます。

(テーブルまたはインデックス) スキャンオペレーターが、テーブルの行の少なくとも70%を処理する場合、既存のヒストグラムはすぐにリプレースされます。

もしそれより少ない場合には、既存のヒストグラムは実際に遭遇した値の選択度をベースに調整され、そのテーブルの観察されていないパーセンテージに調整されます。

ストリングヒストグラムの場合は、リプレースと補正ポリシーは異なります。なぜならば、根底にあるヒストグラムの実装は、実質、数値から異なるからです。

 

おそらく、アプリケーションのワークロードがテーブルをソックリそのままスキャンするクエリーを含んでいないという理由で、もしサーバーがピギーバックされたスキャン経由で、更新された統計を収集できない場合には、サーバーは、プライマリーキー、外部キー、あるいはセカンダリーインデックスのアッパーレベルを使用してカラムヒストグラムの再作成を試みます。

もしカラムがどのインデックスのカラムもリードしていない場合には、最後の手段として、サーバーは、バックグラウンドプロセスを使用してテーブルをスキャンします。

このバックグラウンドプロセスは、テーブルのページの100%+1% の階層化テーブルスキャンを実行します。

サンプリングは、テーブルページを nの等しいサイズのブロックにパーティショニングすることで行います。

n は、サンプルするページの数です。

そして、サーバーは、ランダムに各ブロックから、一つのサンプルページを選択し、リプレースするヒストグラムの計算に使用します。

 

 

統計使用の自己監視

 

サーバーは、更新されたヒストグラムを ISYSCOLSTAT カタログテーブルに、少なくとも30分間 (そして毎CHECKPOINT)自動的に保持します。

これは、統計フラッシャーと呼ばれるDaemonによって実行されます。

上記の自己治癒メカニズムに追加して、SQL Anywhere 12 には、統計クリーナーと呼ばれる統計監視Daemonが含まれており、統計エラーをずっとトラッキングします。

もし監視しているDaemonが、とある特定のヒストグラムはエラーメトリックが継続的に高いので継続的にリビルドが必要であると決定した場合には、Daemonは自動的にDROP STATISTICS文を実行して、そのヒストグラムの自動作成を無効にします。

そのヒストグラムが利用不可能でも、クエリーオプティマイザーは、主に同時実行接続からのデータ内の過度な同時「撹拌」によって発生するヒストグラムに含まれる(誤った)値を利用するよりもむしろ選択度推定のインデックス統計またはマジック値に排他的に依存します。

そして後で、サーバーは上記3つのうちのどれか一つの復元方法を使用して、異常を修正しようとして自動的にカラムヒストグラムを再作成します。

 

我々の経験では、SQL Anywhere の自己管理統計管理は、堅牢で、広い範囲のワークロードや更新シナリオをハンドリングできます。

必要であれば、データベース管理者が、様々な側面の統計収集を制御できるだけでなく、統計フラッシャーと統計クリーナープロセスでも制御できることも真実です。

どちらのタスクの動きも、sa_server_optionシステムプロシージャーを使用することでカスタム可能です。

 

 

[1] I. T. Bowman et al. (April 2007). SQL Anywhere: A Holistic Approach to Database Self-Management. In Proceedings, 2nd International IEEE Workshop on Self-Managing Database Systems, Istanbul, Turkey.

 

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。


過去のブログ記事より : データベースアプリケーションのパフォーマンスにおける7つの大罪

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2015/02/25/from-the-archives-seven-deadly-sins-of-database-application-performance

 

 

この記事のオリジナルは、Glenn Paulleyが sybase.com に2011年2月に掲載したものです。Glenn はこの中で、うまく設計・取り扱われていない場合にはアプリケーションのパフォーマンスに大きく悪影響するアプリケーションアーキテクチャーのコンポーネントのリストを紹介しています。

 

 

多くのデータベースアプリケーションでは、どこかの時点で必ずパフォーマンスが検討課題になります。

 

パフォーマンス分析は一筋縄ではいかないことが多いのですが、それは可変要素が非常に多く、ハードウェアの特性、ワークロード、物理的データベース設計、およびアプリケーション設計など、あらゆる要素を検討する必要があり、またこれらの要素の間にトレードオフや副作用が存在するからです。これが正解、と言えるものが見つからないのが普通です。

 

少し前、SQL Anywhereのコンサルタントである Breck Carterが、「How to Make SQL Anywhere Slow (SQL Anywhere を遅くする方法)」という記事を書きました。これは今までに読んだ記事のなかでも最大のお気に入りの1つです。

 

Breck はこの記事の中で、パフォーマンスの低下につながる 38 の異なるデータベース設計、アプリケーション設計、およびサーバ構成設定を列挙しています。この記事を受けて、今後「データベースアプリケーションのパフォーマンスにおける7つの大罪」という少々生意気なタイトルの下に、特に説明する値打ちがあると思われる 7つの具体的な問題について詳しく書いてみようと思います。

 

 

(続きは、翔泳社 CodeZine に掲載されていますので、そちらをご覧ください。)

過去のブログ記事より : データベースアプリケーションのパフォーマンスにおける7つの大罪(続き)~ 第一の大罪

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2015/03/04/from-the-archives-the-first-deadly-sin

 

 

この記事のオリジナルは、Glenn Paulleyが sybase.com に2011年4月に掲載したものです。Glenn はこの中で、データベース設計における重要なコンポーネントについて、それらがどうアプリケーションのパフォーマンスに影響を与えるのか語っています。

 

 

 

以前の記事でデータベースアプリケーションのパフォーマンスにおける7つの大罪を紹介しました。

 

第一の大罪は''データベースの物理設計''に関するもので、たとえばスキーマ設計の問題、テーブルの列の順序、インデックス付け、データベースページサイズの選択など、パフォーマンスに悪影響を及ぼしかねない重要な要因はいくつも考えられます。

 

今回の記事では、SQL Anywhereのデータベース設計にまつわる具体的な問題と、ドメイン(定義域)の概念に関する内容を取り上げていきます。

 

 

ドメイン(定義域)とは

 

ドメインの概念は、E. F. Coddが発案した最初のリレーショナルデータモデルに含まれています。Chris Dateは、彼の重要な著書 [1, pp. 81] の中でドメインを次のように定義しています。

   次に、ドメインという言葉を、すべて同じ型の、スカラー値の名前付きの集合と定めることにする。たとえば、サプライヤー番号のドメインは、サプライヤー番号として取り得るすべての番号の集合になり、出荷数量のドメインは、ゼロより大きく(たとえば)10,000より小さいすべての整数の集合になる。このように、ドメインとは値のプールであり、その中から実際の属性値が抽出される。

簡単に言うと、Coddが定義したリレーショナルモデルのドメインとは、プログラミング言語の''強い型付け''の定義のようなものです。

 

プログラミング言語の場合と同様、ドメインを使用する1つの目的は、アプリケーション開発者が、たとえば納品伝票番号と顧客番号を比較するような間違いを犯さないようにすることです。どちらの集合の値も(おそらくは)整数ですが、納品伝票番号と顧客番号を比較しても、普通はほとんど意味がありません。

 

理屈はともあれ、商用のリレーショナルデータベース製品では、ドメインの機能は過去40年間ほとんど注目を集めてきませんでした。

 

たしかに、SQL Anywhereを含むほぼすべての商用データベースシステムではDOMAINの定義(ユーザー定義データ型と呼ばれることもあります)がサポートされていますが、これらのDOMAINの実装と、リレーショナルモデルのドメインが意図するところでは大きな違いがあります。

 

ほとんどすべての商用RDBMSシステムでは、柔軟な型指定が許されています。

 

たとえばSQL Anywhereでは、数値列と文字列の比較を含むSQLステートメントが問題なく実行されます。Ivan Bowmanが書いたホワイトペーパー(PDF)では、整合性のない比較を評価しなければならないときにSQL Anywhereで行われる暗黙的な型変換のセマンティクスの概要が示されています(余談: 商用の製品には、それぞれ独自の暗黙的な変換規則があり、そうした比較のセマンティクスは実装依存です)。

 

このような柔軟性は、アプリケーション開発者からすると利点に見えるかもしれませんが、実際は罪なのです。その理由を説明しましょう。

 

 

 

SQL はプログラミング言語ではない

 

アプリケーション開発者は、SQLが「タプル関係計算」に基づくデータ特殊言語であることを肝に銘じておくことがきわめて重要です。簡単に言うと、SQLは一階述語論理に基づいており、クエリでは演算の''対象''を指定するだけで、''方法''は指定しないということです。

 

 

(続きは、翔泳社 CodeZine に掲載されていますので、そちらをご覧ください。)

「自己管理型RDBMS 『SAP SQL Anywhere』を理解するための技術セミナー」を開催します。

$
0
0

SAPの隠れた名品、SAP SQL Anywhereがなぜ全世界の様々なアプリケーションと共に1,000万以上インストール配布され、20,000人以上の開発者、複数のSAP製品や1,000社以上のISVに利用されているのかをご理解いただくための技術セミナーを開催いたします。

 

SAP SQL Anywhereは、皆様の日々のシステム開発案件だけでなく、パッケージソフトウエアや戦略的なIoTソリューションの実現に幅広くご活用いただくことのできる強力かつ特徴あるデータベースです。

 

今回は、SAP SQL Anywhereの大きな特徴である


1. 使われていることを隠すための機能
2. 何もする必要ないハイテクの自動機能
3. 問題が起きない安定性

 

を理解いただき、技術者の懸念点である導入へのハードルの低さを具体的な操作を見ながら体験していただきます。

ぜひともこの機会にSAP SQL Anywhereの全体像と実力をご理解いただき、皆様のビジネスの成功のために、ご活用いただく機会となれば幸いです。

 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
開┃催┃概┃要
━┛━┛━┛━┛━━━━━━━━━━━━━━━━━━━━━━━━━━━

【日時】2015年5月13日(水) 9:30 - 15:00(受付開始9:15~)

 

【場所】SAPジャパン 本社 セミナールーム
    〒102-8022 東京都千代田区麹町1-6-4 SAPジャパンビル
    
http://www.sap.com/japan/tokyo

 

【主催】SAPジャパン株式会社

 

【対象者】
第一部:営業
第一部・第二部:プリセールス担当者、コンサルタント、技術者

 

【参加費】無料・事前登録制

 

【募集人数】50名(定員に達し次第締め切らせていただきます)

 


【お申込はこちら】
http://www.sap.com/japan/events/2015/0513-jp-oem.html

 

 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ア┃ジ┃ェ┃ン┃ダ
━┛━┛━┛━┛━┛━━━━━━━━━━━━━━━━━━━━━━━━━

 

<第一部>  「SAP SQL Anywhereの概要」
9:30-10:45    製品概要、事例、ライセンスについて

 

<第二部>  「SAP SQL Anywhereを使ってみる」

 

11:00-12:30 Ⅰ. SAP SQL Anywhereのインストール、管理
        (バックアップ、リカバリなど)
           
12:30-13:30 ランチ

 

13:30-15:00 Ⅱ. SAP SQL Anywhereを使用したアプリケーション作成、配布、
        SAPのフラッグシップ製品であるSAP HANAなど、
        他データベースとのデータ連携

 

 

◆スピーカー:SAPジャパン株式会社 池口 大輔

 

国内および外資系ソフトウェア開発会社でのシステムエンジニア、コンサルタントとしての経験を経て、アイエニウェア・ソリューションズ
株式会社でSAP SQL Anywhereおよび自然言語解析ミドルウェア製品のコンサルタントとして活動。2013年よりSAPジャパンでデータベース & テクノロジー製品を担当。
----------------------------------------------------------------------

WAN 経由で実行される SQL Anywhere 16 のパフォーマンス最適化

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/docs/DOC-63285

 

 

WAN 経由で実行される SQL Anywhere パフォーマンス最適化

 


 

 

はじめに

 

このドキュメントでは、WAN 経由で実行される SQL Anywhere ネットワークサーバーのパフォーマンスチューニングについて説明します。

WAN の実装で選択されるプロトコルは、TCP/IP のため、このドキュメントではこれに主にフォーカスします。

ネットワークパフォーマンスチューニングは、ある特定のアプリケーションとネットワークで最もうまく機能するものを決定するためのインタラクティブなプロセスである点に注意してください。

 

アプリケーションのパフォーマンス最適化で推奨するステップは以下のとおりです。

  1. アプリケーションで使用するネットワークのパフォーマンスを測定する。
  2. ネットワークのパフォーマンスをベースにアプリケーションをチューニングし、リクエストを減らす。そして/または転送するデータの量を削減する。
  3. ネットワークのパフォーマンスをベースに、SQL Anywhere のサーバーオプションと接続パラメーターをチューニングし、パフォーマンスを最大化する。
  4. LAN におけるチューニングあるいは同様のマシンにおけるオペレーションのインプリケーションを考慮する。

 

多くの場合、SQL Anywhere をチューニングするよりも、アプリケーションをチューニングした方がパフォーマンスに大きく影響します。

 

 

ネットワークのパフォーマンスを測定する

 

ネットワークのパフォーマンス説明には、レイテンシーとスループットを使います。

レイテンシーは、1台のマシンがデータのパケットを送信した時間と、2 台目のマシンがデータを受信した時間間の遅延を参照します (例えば、2 台目のマシンが最初のマシンよりデータを10ms 遅く受信した場合、そのレイテンシーは10ms になります)。

スループットは、ある一定の時間に転送可能なデータの総量を参照します (例えば、1台のマシンが1000KB のデータを送信し、2台目のマシンが全てのデータを受信するまでに 5 秒かかった場合、そのスループットは 200 KB/s となります)。

LAN では、通常レイテンシーは1 ms 以下です。そして、スループットは、通常 10 MB/s あるいはそれ以上になります。

WAN では、通常レイテンシーは、非常に大きく (おそらく 1 ms から 500 ms)、スループットは通常より小さくなります ( おそらく 6 KB/s から 2 MB/s)。

 

ラウンドトリップ時間とは、1台目のマシンから2台目のマシンにデータを転送するレイテンシーと2 台目のマシンから 1 台目のマシンにデータを転送するレイテンシーの合計です。

ネットワークスループットは、最低 200 KB のサイズのファイルを、1 台目から 2 台目にコピーして、そのコピーのタイミングから測ることができます。

コピーは、FTP を使用した一般的なファイルコピー、あるいはインターネットブラウザーを使用したファイルのダウンロードとしてでもかまいません。

 

2 台のマシン間のレイテンシーとスループットを見積もり方法として、SQL Anywhere ネットワークサーバーを片方のマシンで実行し(データベースサーバーがすでに高負荷になっていないことを確認してください)、下を2台目のマシンで実行するという方法もあります。

 

dbping -d -c <connection string to network server> -st 10

 

スループットが大きいネットワークでは、dbping でレポートされるスループット値は実際のネットワークのスループットより小さくなる可能性があることに注意してください。

レイテンシーが大きく、スループットがリーズナブルなネットワークで、リーズナブルな SQL Anywhere のパフォーマンスを得るには、クライアントで作成したリクエスト数を、最小限にする必要があります。

レイテンシーがリーズナブルで、スループットが小さいネットワークの場合には、クライアントとサーバー間で転送されるデータの量を最小限にする必要があります。

 

 

アプリケーションをチューニングしてWAN 経由のパフォーマンスを改善する

 

一般的には下の提案を実装してアプリケーションを変更することで、リクエスト数と転送データ量を削減することができます。

これらの提案は、どの環境(スタンドアロン、LAN、WAN)のアプリケーションのパフォーマンス改善でも役に立ちます。

 

  • アプリケーションから、多くのSQL 文を必要とするロジックを1つ以上のストアドプロシージャーまたは関数に移す。
  • ベーシックな同じSQL 文が1回以上使用されている場合には、一度ステートメントを準備し、異なるパラメーターで複数回実行することを検討する。
  • アプリケーションが必要以上にクエリーまたはSQL 文を実行しないようにする。特定のクエリーが1度以上実行されている場合には、最初にクエリーが実行された時に結果をキャッシュするようアプリケーションを変更し、クエリーを再実行するのではなく、キャッシュされた値を使用することを検討する。
  • 1つのプロパティー、関数、変数値を得るクエリーを結合させて1つのマルチ-カラム-クエリー にする。

   以下のクエリーを実行したい場合、SELECT current userSELECT @@servernameおよび SELECT connection_property('BytesSent')の 3つのクエリーを実行するのではなく、1つのクエリーを使用する。

SELECT current user, @@servername, connection_property( 'BytesSent' )

  • サーバーで join を実行できる場合には、アプリケーション内で複数のクエリーを使って join を行うことを避ける。アプリケーションで1つのクエリーを実行し、それから2つめのクエリーを最初のクエリー結果を使用して実行する場合には、本質的にはアプリケーション内で複数のクエリーを一緒に join していることになります。複数のクエリーではなく単一のクエリーを使用して join を行うことが可能であれば、劇的にパフォーマンスを改善することができます。単純な例として、アプリケーションで以下のクエリーを実行しSELECT T.x FROM T WHERE <conditions on T> ORDER BY <order>、それから T.x の各値にSELECT R.y FROM R WHERE R.z = <value of T.x>を実行するとすると、 SELECT T.x, R.y FROM T, R WHERE <conditions on T> AND R.z = T.x ORDER BY <order>という1つのクエリーにまとめることができます。
  • 接続を初期化した後にオプション設定することを避ける。DDL (Data Definition Language、データ定義用語) を避ける。そして設定変数をドロップすることを避ける。これらは、クライアントステートメントキャッシングを発生させて、キャッシュされたステートメントを再使用できなくしてしまう可能性があり、また、これらはキャッシュプランを発生させ、再使用できなくしてしまう可能性があります。DLL を本番環境で使用すると、DLL オペレーション中の全体パフォーマンスの低下、サーバーのメモリーにリロードする必要のあるプロシージャーなどのサイド効果など、結果として潜在的なパフォーマンス問題になる可能性があります。
  • 単一の長い接続が使用できる場合には、複数の短い接続を避ける。これが不可能な場合には (例えば web サーバーからの場合)、接続プーリングを検討する。SQL Anywhere は、ビルトインの接続プーリング (SQL Anywhere .NET データプロバイダーでは、POOLING 接続パラメーターを使用し、他のクライアント API では、ConnectionPool 接続パラメーターを使用) を持っており、アプリケーションによっては、パフォーマンスが改善される設定が可能です。
  • サードパーティー製の開発ツールを使用する場合 (例えば PowerBuilder、Visual Basic や Delphi など)、パフォーマンスを向上するためにアプリケーションに特有の設定があるかどうかチェックする。例えば、PowerBuilder ではBLOCK 接続プロパティーを変更することで、WAN 経由のパフォーマンスが改善されることがあります。

 

 

リクエストの数を減らす

 

下の提案でリクエスト数を減らせる可能性があります。特に、ネットワークのレイテンシーが大きい場合には有効です。これらの提案は、他のネットワークにおけるパフォーマンスを改善する可能性もあります。

 

  • get データを使用するのではなく、フェッチデータへのbound columnを使用する。これにより、特にカーソルからの最初のローをフェッチする場合にリクエストの数を削減できます。
  • 可能なところで、SQL 文をバッチ (全て1つのステートメントであるかのように実行されるセミコロンによって分割された 一連の SQL 文)に統合する。
  • オートコミットを無効にし、余分なコミットリクエスト (コミットまたはロールバックは、多くの場合、過剰なブロックを避けるためユーザーのインプットを待つ前に実行する必要がある)を削除する必要がある時だけ明示的にコミットする。
  • ワイドフェッチ(ローセットサイズを増加する)と、ワイドインサート(パラメーター値のアレイを使用する)を使用する。これらは、1つのローに対して1つのリクエストではなく、1つのリクエストで複数のローをフェッチまたは挿入する。プリフェッチも、リクエストごとに1以上のローをフェッチします。

 

 

ネットワークで転送されるデータ量を減らす

 

以下の提案は、一般的に転送データ量を削減します。これは特にネットワークのスループットが小さい場合に有効です。これらの提案で、他のネットワークにおけるパフォーマンス低下をもたらすことはあまりありません。

 

  • 大きなデータベースクエリーには、ストアドプロシージャーを使用することを検討する。これは、小さなCALL 文の送信でクエリーを実行できるため、ネットワーク越しに大きな文をサーバーに送る必要性がなくなります。
  • クエリーの最初のロー(あるいは最初のいくつかのロー)だけをフェッチングすることがわかっていれば、FIRST または TOP n 節をクエリに追加する。あるクエリー内の最初のいくつかのローをスキップしたいのであれば、START AT 節を使用します。これらの節は、特に、プリフェッチが有効の場合、使用しないローが転送されるのを防止します。また、これらの文を追加することで、クエリーオプティマイザーが効率的な実行方法を理解するのにも役立ちます。

 

SQL Anywhere をチューニングして WAN 経由のパフォーマンスを改善する

 

以下の提案は、SQL Anywhere をチューニングすることで、WAN 上のアプリケーションの実行を向上させます。そのため、ネットワークのレイテンシーやスループットとは関係ありません。

 

  • liveness が原因で接続が切断される場合には、liveness timeout 値を増やすことを検討する。この値を増やすこと自体がパフォーマンスを改善するわけではありませんが、livenessが原因で接続が継続してタイムアウトするのであれば、この値を増やす必要があります。このオプションは(LivenessTimeout接続パラメーターを使用して)クライアントまたはサーバー (-tl)で設定することができます。LivenessTimeout 接続パラメーターを使用すれば、WAN 接続専用の liveness timeout に変更することができます。

 

多くの場合、下の提案方法でリクエスト数を減らすことができます。これは特にネットワークのレイテンシーが大きい場合に有効です。

 

  • プリフェッチの動作を変更することを検討する。アプリケーションがローをフェッチする場合、SQL Anywhere はカーソルタイプや他の要因次第で追加ローをプリフェッチする可能性があります。プリフェッチは、多くのローがカーソルからフェッチされる場合、特にレイテンシーが大きいネットワークにおいて、リクエストを削減し、パフォーマンスを大幅に改善することができます。絶対フェッチ、相対ネガティブまたは相対0フェッチ、ロールバック、そして、ある get データオペレーションは、プリフェッチローを処分し、再フェッチさせます。これはパフォーマンスを低下させることになります。プリフェッチは、最初のロー以上のローがフェッチされた場合には、forward-only, read-only カーソルでこそ最善で使用されます。アプリケーションが各カーソルからの多くのローをフェッチし、fetch next オペレーションだけを使用する場合、PrefetchRows および PrefetchBuffer 接続パラメーターを使用することで、パフォーマンスが向上することがあるかもしれませんが、一般的にはデフォルトの値で十分です。アプリケーションが結果セットの一部のみをフェッチする場合に多くのローをプリフェッチすると、潜在的にパフォーマンスを低下させることになります。さらに、多くのカーソルのオープンがされている場合には、ODBC や JDBC アプリケーションは、PrefetchOnOpen 接続パラメーターの恩恵を享受することができます。これらのカーソルはプリフェッチできないので、正確性のために絶対的に必要でなければ、(ODBC DYNAMIC、KEYSET、ESQL SENSTIVE、SCROLL タイプなどの) value センシティブなカーソルタイプの使用はさけます。
  • 特に、多くのカーソルがオープンしクローズされる場合、LazyClose 接続パラメーターを使用することを検討する。これにより、カーソルをクローズする際に余分なリクエストをなくすことができます。

 

ネットワークのスループットが小さい場合には、以下の提案が有効である可能性があります。

 

  • 通信の圧縮 (サーバーの -pc オプションまたはクライアントの圧縮接続パラメーター) を使用することを検討する。通信の圧縮を使用することで、転送データ量、転送パケット数を減らすことはできますが、リクエスト数を減るわけではありません。通信の圧縮は、特に大きなフェッチ、マルチローフェッチ、または、BLOB オペレーションの場合に有効です。ただし、通信の圧縮では、クライアントとサーバーの両方でCPUやメモリをより多く使用することに注意してください。その結果、場合によってはパフォーマンスが悪くなることがあります。そして多くの場合、LANでのパフォーマンスが低下します。クライアントの圧縮接続パラメーターを使用することで、WAN 接続のみ通信圧縮を有効にすることができます。
  • ReceiveBufferSize と SendBufferSize TCP/IP プロトコルオプションをクライアントとサーバーの両方に使用することを検討する。これらのオプションは、プロトコルスタックのメモリーを事前に割り当てて、TCP/IP パケットを送信・受信します。プロトコルスタック内のメモリーの事前割り当ては、ネットワークインテンシブなアプリケーションのクライアント/サーバーのパフォーマンスを増大することができます。デフォルト値はマシン依存で、実験には約65 536 から 262 144 バイトの範囲の値がリーズナブルです。
  • アプリケーションがカーソルからの最初のローのみを使用する場合、DisableMultiRowFetch 接続パラメーターを使用してプリフェッチを無効にすることで、パフォーマンスを改善することが可能です。DisableMultiRowFetch を使用するかわりに、上記のアプリケーションチューニングのセクションで提案したように、最初のローだけをフェッチするところで、クエリでFIRST 節を使用するようにアプリケーションを変更すると、より速いパフォーマンスを得られる可能性があります。DisableMultiRowFetch を使用すると、より速いネットワークであっても、多くの場合に、パフォーマンスの悪化を起こす可能性があります。

 

チューニングをスタートするにあたり、いくつか設定上の提案があります。これらの設定でスタートしてテスト環境に適用し、パフォーマンスにどう影響するか確認してください。また、上に記載したサーバーオプションや接続パラメータの追加、削除を試みて、パフォーマンスにどう影響するか確認してください。これは、厳密な科学ではないので、特定のネットワークにおける特定のアプリケーションのベストのパフォーマンスを得るには、トライアル&エラーを何度か行う必要があります。

LAN の潜在的なパフォーマンスのimplicationについての詳細は、下の「LAN経由、および同様のマシンでのオペレーションのパフォーマンスインプリケーション」のセクションを参照してください。

 

データベースサーバーコマンドラインオプション

 

dbsrv16 -x TCPIP(SendBufferSize=100000;ReceiveBufferSize=100000)-n server_name ...

 

クライアント接続パラメーター

 

PrefetchOnOpen は、ODBC と OLE DB 専用だということに注意してください。SendBufferSize と ReceiveBufferSize から改善がみられない場合には、下の例にある CommLinks=TCPIP(…) のかわりに、シンプル化のために HOST=w.x.y.z:port を使用することを推奨します。ホスト名または IPv6 アドレスをw.x.y.z のかわりに使用でき、2638 (デフォルト) を使用している場合には、:port は必要ありません。

 

"ServerName=server_name; Compression=Yes; CommLinks=TCPIP(Host=w.x.y.z:port; DoBroadcast=NONE; SendBufferSize=100000; ReceiveBufferSize=100000); PrefetchOnOpen=Yes; LazyClose=Yes; ..."

 

注意

 

ここにリストされているオプションは、通信関連のものです。全環境においてサーバーをより効率的に動作させるにあたり検討する必要のあるオプションが他にもあります (例えば、キャッシュサイズやデータベースページサイズなど。詳細については、SQL Anywhere のマニュアルを参照してください。

 

 

LAN経由、および同様のマシンでのオペレーションのパフォーマンスインプリケーション

 

LAN 環境でもアプリケーションが実行される場合には、SQL Anywhere の通信オプションもそこで忘れずにテストしてください。これらのオプションもその環境に適応させる必要がある可能性があります。

 

このドキュメントに記載しているアプリケーションパフォーマンスチューニングの提案は全て、LANのパフォーマンスと同様の設定のマシンのパフォーマンスを通常改善、あるいは少なくとも維持することができます。

 

以下のSQL Anywhere のWAN のチューニングの提案ではLAN あるいは同等のマシンのオペレーションのパフォーマンスが非常に低下する可能性があります。これらはLAN のテストで、LAN経由でもパフォーマンスを上げることが確認された後にのみ、あるいはWANのクライアントのみ有効にするべきです。

 

  • Liveness timeout を変更すると、検出されない接続の切断を長い間発生させることになります。
  • メモリーとCPUの使用の増加が潜在的なスループットのゲインよりまさるところでは、通信圧縮を有効にすると、結果としてLAN におけるパフォーマンスが遅くなることがよくあります。
  • プリフェッチの設定変更 (PrefetchRows、PrefetchBuffer そしてDisableMultiRowPrefetch)。 全プリフェッチの設定は、潜在的にアプリケーションと環境によってパフォーマンスを増加または減少させます。

 

 

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

過去のブログ記事より : データベースアプリケーションのパフォーマンスにおける7つの大罪(続き)~ 第二の大罪

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2015/03/25/from-the-archives-the-second-deadly-sin

 

 

 

この記事のオリジナルは、Glenn Paulleyが sybase.com に2012年5月に掲載したものです。Glenn はこの中で、SQL Anywhere で利用可能な様々なオプションを使用した場合の並行性制御とその結果について語っています。


2011年に、私は「データベースアプリケーションのパフォーマンスにおける7つの大罪」と題したブログ記事を書きました。そして、それに続く記事として、2011年4月に「データベースアプリケーションのパフォーマンスにおける7つの大罪(続き)~ 第一の大罪」という題で、リレーショナルモデルにおける弱い型付けに関連した問題について説明しました。

 

この記事では、並行性制御の影響、特にREAD UNCOMMITTEDREAD COMMITTED といった弱い標準SQL 分離レベルの使用を決定する場合のトレードオフについて説明したいと思います。

 

 

 

ブロックによる競合


SQL 標準の分離レベル [3] である READ UNCOMMITTED(確定していないデータまで読み取る)、READ COMMITTED(確定した最新データを常に読み取る)、REPEATABLE READ(読み取り対象のデータを常に読み取る)、そしてSERIALIZABLE (直列化可能)をサポートする多くの商用データベースシステムは、通常、並行トランザクションによる更新異常を避けるため、ローレベルで2 フェーズロック (2PL) を使用します。

分離レベルが異なると、読み取りの動きには影響がありますが、書き込みの動きに影響はありません。

トランザクションは、まず最初にローを修正する前にそのローの排他ロックを獲得しなければならず、これはトランザクションが COMMITまたは ROLLBACKを実行するまで保持されます。

そのため、別のトランザクションによるそのローへのさらなる修正を防ぐことができます。

これが、2PL のセマンティクスです。

 

そのため、本質的に直列実行を強制するアプリケーションを設計するのは簡単です。

私が以前書いた容量計画のホワイトペーパーの例1 が、典型的な直列実行の例です。

この例では、アプリケーションは新しい client が挿入されると以下のような SQL 文のセットを yield しながら、サロゲートキーを増やしていきます。

 

 

  1. UPDATE surrogate SET @x = nextkey, nextkey = nextkey + 1 WHERE object-type = 'client'
  2. INSERTINTO client VALUES(@x, ...); 
  3. COMMIT

 

サロゲートテーブル内の 'client'  ロー上の排他ローロックは、トランザクションの終了まで保たれるので、このロジックは、事実上、全 client 挿入の直列化を強制します。このロジックを1つの、あるいはほんの 2・3 のトランザクションでテストするだけでは、後にパフォーマンス問題を引き起こしかねません。

この直列化が問題になるのは、スケール時のみで、全てがそうでないとしても、デッドロックを除き、並行性制御の問題です。

 

ロック競合によって発生した問題はパフォーマンスに大きく関係しているため、直列化を最もシビアな形式の1つとして、ロック競合をテストするのは困難です。

また、通常追加の待ちスレッドのみ yield するので、アプリケーションの並行性の程度を増すことによって問題を解決するのは難しく、以前私のメンターであった Great-West Life社のGord Steindel 氏が言っていたように-全ての CPU が同じスピードで待つ-ので、問題があるところに追加の計算パワーを投入しても、問題解決は困難です。

 

 

なぜ低い分離レベルではいけないのか?


2PLでは、書き込みトランザクションはREAD COMMITTEDまたはそれよりも高いレベルのものを実行している読み込みトランザクションをブロックします。

これらの読み込みロックの数、そしてスコープは、SERIALIZATION 分離レベルに移行するにつれて増加します。

そしてreader やwriter のワークロードがミックスしたワークロードにおいて、直列実行を犠牲にすることで直列化可能セマンティクスを実現します。

 

そのため、獲得する読み込みロックの数を減らすことでパフォーマンスをより良くし、それゆえブロックの総数を減らすことと、直列トランザクションスケジュールのサーバーの保証をトレードオフするというのは、筋が通っています。

これは、通常読み込みトランザクションと書き込みトランザクションの割合が8:2の多くのアプリケーションで有意義である戦略です。

 

しかし、このトレードオフは無償ではありません。これは、アプリケーションを更新トランザクションの直列実行の結果発生するデータ異常にさらすという犠牲の上になりたっています。

しかし、また、これは定量化するのがとても困難です。

誰が、データベース内の陳腐化したデータに対するアクション、あるいは以前に修正されたロー(しばしば「ロストアップデート」と称される)を上書きするリスクを測定しようと試みるでしょうか?

繰り返しますが、この問題はスケールで悪化するため、典型的なアプリケーションの開発サイクルの中で、このリスクを分析し測定するのは困難です。

 

先週米国アリゾナ州フェニックスで開催された 2012 ACM SIGMOD Conferenceで、これらの課題についての最新の研究[1]が発表されました。

このカンファレンスでは、カナダ モントリオール マギル大学コンピューター科学の大学院生である Kamal Zellagと、彼のスーパーバイザーである Bettina Kemmeがアプリケーション実行時にアプリケーション内で発展する直列グラフサイクルの数を測定するシステム、ConsAD を発表しました。

ここでは、サイクルは、陳腐化されたデータ、ロストアップデート、あるいは両方を含む状況を意味します。

昨年ドイツのハノーハーで開催された IEEE Data Engineering Conference でプレゼンされた全体文書 [2] を読むと、背景がわかります。

以下がその概要です。

 

オンラインプロセッシングのアプリケーションは、ベースとなるインフラストラクチャーが提供するトランザクショナルプロパティにたいへん依存するにも関わらず、不経済で厳密な2フェーズロッキング並行性制御が潜在的に意味するパフォーマンスを理由に、最高の分離レベル、つまり、serializability を使用しない選択がされることがよくあります。

一方で、アプリケーションサーバー層とデータベースサーバー層で構成されているモダンなトランザクションシステムでは、パフォーマンスと一貫性の間のトレードオフを提供しながら、いくつかの分離レベルを提示しています。

また、特定の分離レベルで発生する可能性のある異常の特定方法はたいへんよく知られているにも関わらず、あるアプリケーション実行時に発生する異常の量の定量化は困難です。

我々は、この問題に対して、任意の多層アプリケーションの一貫性異常をリアルタイムに検出するという新しいアプローチを発表します。

アプリケーションを実行すると、我々のツールは関連するトランザクションとデータアイテムを正確に示しながら、オンラインで異常を検出します。

さらに、発生の頻度とともにビジネスメソッドを示しながら、検出された異常をいくつかのパターンにクラス分けしていきます。

新しく投入するトランザクションタイプが、特定の分離レベルの異常の数に対していかに劇的な効果を与えることができるのか、そして、我々のツールがいかに速くこのような問題トランザクションを検出できるのかをお見せするため、RUBiS ベンチマークを使用します。

そのため、我々のシステムは、設計者の異常が発生しない分離レベルの選択にも、異常を避けるためのトランザクション設計変更にも、役に立ちます。

 

この研究で説明されている Java のアプリケーションシステムは、JBOSSのオブジェクトリレーショナルマッピングツールキットである Hibernateを利用しています。

このConsAD は、2つの部分から成っています。

ColAgent と呼ばれる「shim」は、アプリケーションのトレースをキャプチャーし、アプリケーションが使用するHibernate ライブラリを修正して実装されます。

そして、もう一方は、分析ピースである DetAgent で、ColAgent が作成する 直列グラフを分析し、異常を探します。

彼らの2011年の研究で、RuBis と称されるテスト中のアプリケーションにおいて、Hibernateのビルトインの楽観的並行性制御スキーム (この文書ではJOCC と称されている) を使用した場合、READ COMMITTED を使用している2PL、あるいはPostgreSQLにおけるスナップショット分離の実装(でさえも) 異常に苦しんでいることを発見しています。

2011 ICDE の文書に掲載されているこのこのグラフは、RUBiS "eBay シミュレーション" の全3種の並列制御スキーマにおける異常の頻度を示しています。

これらの実験では、スナップショット分離は、全ベンチマークサイズで継続して最少の異常を提示したことに注意してください。

これはアプリケーションアーキテクトが研究すべき特徴です。

しかし、スナップショット分離は、直列化可能性に相当するものではありません。

他の著者が [4-7] について執筆していますが、まだ、テストにおいて低頻度の異常が発生します。

 

ConsAD_results.jpg

 

 

このグラフは、全3つの並列性制御スキーマで発生する異常を示すだけでなく、これらの異常の頻度が、スケールとともに劇的に増加するということを示しています。

この問題の一部は、Hibernate がキャッシングを使用することにあります。

直接のローの参照は、結果としてキャッシュヒットになります。

一方、それゆえにネストされたサブクエリーを含むより複雑なクエリーまたはジョインは、データベース内の (最新の)ローのコピーに反して実行され、データの陳腐化に繋がるます。

そのため、これらの結果は、OEM ツールキットを使用しているアプリケーション開発者への警告として出す必要があります。なぜならば、負荷がかけられている場合に、彼らのアプリケーションで直面するかもしれない陳腐化した異常、そして/あるいはアップデートのことは、あったとしてもほとんど考えにないことがよくあるからです。

 

Kamal と Bettina が、この仕事を拡大してHibernate以外のアプリケーションフレームワークをカバーするようになると素晴らしいと思います。

先週 Phoenix にいた際に、Kamal と長話しましたが、Hibernateのマッピングモデルは、制限されていないODBC アプリケーションよりずっと簡単にこの種の分析を行うことができます。

もし存在すれば、このようなツールは別のタイプのアプリケーションでこのような異常を発見するのにも便利でしょう。

 

 

参考


[1] K. Zellag and B. Kemme (May 2012). ConsAD: a real-time consistency anomalies detector. In Proceedings of the 2012 ACM SIGMOD Conference, Phoenix, Arizona, pp. 641-644.
[2] K. Zellag and B. Kemme (April 2011). Real-Time Quantification and Classification of Consistency Anomalies in Multi-tier Architectures. In Proceedings of the 27th IEEE Conference on Data Engineering, Hannover, Germany, pp. 613-624.
[3] H. Berenson, P. Bernstein, J. Gray, J. Melton, E. O'Neil, and P. O'Neil (May 1995). A critique of ANSI SQL isolation levels. In Proceedings of the ACM SIGMOD Conference, San Jose, California, pp. 1-10.
[4] A. Fekete (January 1999). Serialisability and snapshot isolation. In Proceedings of the Australian Database Conference, Auckland, New Zealand, pp. 201-210.
[5] A. Fekete, D. Liarokapis, E. J. O'Neil, P. E. O'Neil, and D. Shasha (2005). Making snapshot isolation serializable. ACM Transactions on Database Systems 30(2), pp. 492-528.
[6] S. Jorwekar, A. Fekete, K. Ramamritham, and S. Sudarshan (September 2007). Automating the detection of snapshot isolation anomalies. Proceedings of the 33rd International Conference on Very Large Data Bases, Vienna, Austria, pp. 1263-1274.
[7] A. Fekete, E. O'Neil, and P. O'Neil (2004). A read-only transaction anomaly under snapshot isolation. ACM SIGMOD Record 33(3), pp. 12-14.

SQL Anywhere をモノのインターネット(Internet of Things : IoT)のエッジコンピューティングで使用する

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/cloud-platform/blog/2015/05/06/using-sap-sql-anywhere-to-enable-edge-computing-for-the-internet-of-things

 

急速にディジタル化が進む社会において、インターネットの利用が可能になったデバイスは爆発的に増加しています。 2014年の Gartner レポートでは、5年後にはインターネットに接続したデバイスは 30 倍にもなると予測しています。別のアナリストは、インターネットに接続したデバイスの販売は、2015年単独で、40億から60億台になると予測しています。

 

このモノのインターネット(Internet of Things : IoT)の急速な成長は、オペレーションに関する意思決定のリアルタイム性を改善するために、エンタープライズのエッジでリアルタイムデータを活用することで生まれるビジネスバリューによって加速しているものです。以下にその例をいくつか挙げてみたいと思います。

 

  • サプライチェーンのロジスティクス管理システムにおいて、インターネット接続された車、輸送コンテナ、交通管理システム、道路センサー、レールシステムからのデータを分析し、ルートや積荷作業のスケジュールを最適化。これにより、ドライバーや作業者、設備などの空き時間を最小限にし、倉庫スペースの利用を改善。
  • サービスセンターから離れた場所で使用する農作業用のトラクターに何百ものセンサーを搭載し、機械部品をリアルタイムに測定してデータ転送。そのデータをモニターし、予知保全分析を実現。システムが潜在的な部品の不具合を予知した場合は、自動的に一番近いサービスセンターに通知することで、故障する前に部品をサービス要員が交換。これによりトラクターのダウンタイムを最小限に。
  • 大規模流通業者のビーコンネットワークが引かれた店舗で、店舗内プロモーションプログラムへの参加を選択した顧客をトラッキング。携帯電話のデータを元にビーコンで店舗内の顧客の位置をシステムに転送し、顧客の購入パターンを分析。顧客が店舗にいる間に顧客毎に異なるタイムセール情報をシステムから直接顧客の携帯電話に送信。
  • アスリートがインターネットに接続した腕時計をして、心拍数や他の統計情報を測定。パーソナルフィットネスサービスにその情報を蓄積し、その情報を元にアスリート毎に異なるフィットネスプログラムを提案。

 

これらは人々とビジネスが、コンテキストセンシティブな情報を捉えるために、エンタープライズのエッジでセンサー、IoT ゲートウェイ、スマートアプリケーションを使用してその情報をより良い意思決定を行うために使用しているほんの一例です。

これらの接続されたデバイスの多くは、その利用方法のために、常時接続されるわけではなく、時々接続されるだけです。そのため、これらのデバイスは「オフライン」で機能し、再接続された時に自動的にデータ同期される必要があります。

 

このことから、SAP は本日SAPPHIREにて、SAP HANA Cloud Platform (HCP) >- IoT Services と使用するための SQL Anywhere のリモートデータベース クライアントを期間限定で無償で提供することを発表しました。

 

SQL Anywhere は、今日の市場で最も開発者にフレンドリーで、エンタープライズレベルの堅牢性を備えた埋め込み型のデータベーステクノロジーです。非常に軽量で、最小限のコンピューターとストレージ容量でデバイスに配備することが可能です。データ同期テクノロジーが実装されており、これがこのデータベーステクノロジーをさらに特別なものにしています。

 

SQL Anywhere はスイート製品であり、 主に 3つのコンポーネントから構成されています –  SQL Anywhere データベース、Ultra light データベース、そして、 Mobile Link データ同期テクノロジーです。

 

  • SQL Anywhere データベースは、アプリケーションへの埋め込みが容易になるよう、またはモバイルでの利用も想定して設計されているデータベースでありながら、空間データのサポート、全文検索、先進の暗号化オプションなどエンタープライズレベルの機能を装備しています。さらに、全てのメジャーなオペレーティングシステムをサポートし、データセンターのサーバーや、ノートPC ( Mac でも動きます!) 、そしてそれらよりも小さいデバイス - 例えば Raspberry Pi、あるいは一般的なスマートフォンなどにも配備することが可能です。自動管理型のデータベースのため、アプリケーションの要求に合うよう、on-the-fly でバッファープールアロケーションをチューニングします。そのため、データベース管理者は必要なく、ゼロアドミニストレーションです。

 

  • Ultra Light は、特にリソースに制約のあるデバイス向けに設計されています。SQL Anywhere のようにデータベースの機能をフルには装備していません。デバイスで動くアプリケーションに対して、基本的なデータベース機能を実装するためのものであり、フルの機能は必要ないからです。

 

  • Mobile Link は、統合同期テクノロジーで、データのアップロードとダウンロードの双方向の同期を行うことが可能です。Mobile Link を使用すると、リモートのデータベースクライアント(SQL Anywhere または Ultra Light)から HANA へ直接データを同期することができます。

 

お客様のエッジにあるデバイスとHCP および HANA のリンクが、非常にシンプルになりました。何千ものセンサー、ゲートウェイ、あるいはデバイスを数える必要はありません。シンプルに、HCP IoT サービスをサブスクライブすれば、SQL Anywhere データベースの、IoT のエンドポイントでの使用は、無制限です(期間限定)。データをエッジで収集し、シームレスに HCP に届け、HANA のインメモリーコンピューティングのパワーと分析の機能をお客様のビジネスのクリティカルな意思決定をパワーアップできます。

 

SQL Anywhere についての詳細は こちらをご参照ください。HCP IOT サービスをサブスクライブするお客様は、今なら(期間限定で) リモートの SQL Anywhere と Ultra Light のクライアントデータベースを購入する必要はありません。

 

アプリケーション開発者の皆様、ぜひこちらより SQL Anywhere Developer Edition をダウンロードして開発をスタートしてください。またSCN コミュニティーに参加して、テクノロジーの詳細を学んでください。

 

 

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

SAP SQL Anywhere, on-demand edition (クラウド版) 用追加ソフトウェア

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/docs/DOC-61323

 

 

SAP SQL Anywhere, on-demand edition クラウドは、複数の異なるデータベースサーバーのバージョンを動かすことが可能です。

新しいサーバーのバージョンは、そのバージョンのサーバーをスタートする前に、クラウドに追加してインストールされている必要があります。

 

追加のサーバーのバージョンの追加・インストール方法は、マニュアル(SP5版、英語)(SP3、日本語)に掲載されています。

 

また、こちらのブログ記事に詳細のステップを画面ショットとともに掲載しています。

 

これらのソフトウェアパッケージは、既存の SAP SQL Anywhere, on-demand edition クラウドと一緒にのみ使用が可能です。

 

使用可能な追加サーバーのバージョン

バージョンビルド番号WindowsLinux
SAP SQL Anywhere 1212.0.1.4086ダウンロードダウンロード
12.0.1.4216ダウンロード
12.0.1.4224ダウンロード
12.0.1.4231ダウンロード
SAP SQL Anywhere 1616.0.1824ダウンロードダウンロード
16.0.2095ダウンロード
16.0.2111ダウンロード

 

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。


SAP SQL Anywhere, on-demand クラウドにサーバーのバージョンを追加する

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2015/01/14/adding-additional-server-versions-to-a-sap-sql-anywhere-on-demand-cloud

 

 

SAP SQL Anywhere, on-demand エディションのクールな機能の1つに、複数のサーバーのバージョンを同じクラウド内で動かすことができるということがあります。例えば、SQL Anywhere 12 と SQL Anywhere 16 サーバーを同時にどちらも、同じマシン上でも、動かすことができます。(注意: これは、同時に複数のデータベースのバージョンを動かすこととは異なります。もちろんこれも可能です。)

 

 

SQL Anywhere, on-demand edition クラウドを作成する時点では、1つのサーバーバージョンのみ可能です。異なるサーバーバージョンを使用するには、クラウド内に新しいサーバーソフトウェアをインストールする必要があります。このクイックチュートリアルでは、既存のSP5 クラウドに対してSQL Anywhere 12 のサポートパッチを追加する場合に必要なステップについて説明します。

 

 

  1. SQL Anywhere, on-demand edition SP5 クラウドを作成します。クラウドがない場合には、 Developer Editionを使用して作ることが可能です。SP5 のデフォルトのサーバーに含まれているのは、SQL Anywhere 16.0.0.1824 です。 クラウドコンソールを開いて、Cloud Softwareリンクをクリックします。現在インストールされているのは一つのサーバーバージョンであることがわかります。
    Capture2.PNG
  2. SAP web から新しいサーバーのバージョンをダウンロードする必要があります。 サイトの提供可能なサーバーバージョンのリストよりクラウドに追加したいサーバーのバージョンのインストールパッケージをダウンロードしてください。 このデモでは、SQL Anywhere 12.0.1.4086 for Windowsパッケージをダウンロードして使用します。
  3. インストールパッケージはインストールする前にクラウドに追加する必要があります。 Events -> Run new task . をクリックしてください。
    Capture4.PNG
  4. AddCloudSoftwareUpateFromFile を選択します。
    Capture5.PNG
  5. ステップ 2 でダウンロードしたインストールパッケージへフルのパスを入力します。Next.をクリックします。これで、インストールパッケージがクラウドに追加されます。
    Capture6.PNG
  6. Cloud Softwareタブをクリックして、新しいサーバーバージョンがクラウドに追加されていることを確認します。
    Capture7.PNG
  7. 新しいサーバーバージョンがクラウドに追加になっていても、これはまだインストールされていません。インストールパッケージのクラウドへの追加は一度だけ行う必要がありますが、そのサーバーのバージョンを動かしたいホスト全てに対してインストールする必要があります。これによりあるサーバーバージョンの使用を特定のホストに限定することができます。クラウドコンソールを使用すれば、どのホストへのインストールも簡単です。新しいクラウドのバージョンを選択して、Install を選択します。
    Capture8.PNG
  8. 新しいサーバーのバージョンがインストールされて欲しいホストのリストを入力します。Capture9.PNG
  9. クラウドコンソールで全ターゲットホストへの新しいサーバーバージョンのインストレーションをコーディネートします。インストールが完了したら、新しいサーバーバージョンは、Installed Cloud Software のリストに掲載されます。
    Capture10.PNG
  10. これで新しいサーバーを作成する際には、新しいサーバーのバージョンを選択することができます。
    Capture11.PNG

 

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

過去のブログ記事より: クエリーパフォーマンス分析の全体アプローチ

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2014/07/30/holistic-approaches-to-query-performance-analysis

 

この記事のオリジナルは、Glenn Paulleyが sybase.com に掲載したものです。

 

 

 

 

私たちは、SQL Anywhereのようなリレーショナルデータベースシステムを、セルフマネージング、セルフチューニング、そしてセルフヒーリングのデータベースにするために努力を重ねていますが、その一方で、パフォーマンスの問題を診断し、解決する必要性は依然として存在しています。

 

この必要性は、一部にはクエリー最適化における全体的な複雑性にあります。

クエリー最適化とは、- 未だ - NP - つまり難しい問題であり、最適化プロセスへのインプットには、様々な heuristics (経験則)、特に述部の選択的推測が含まれます。

しかしながら、パフォーマンス問題の原因は、今日のコンピューターの特徴でもある増加するハードウェア環境の複雑性にもあります。この記事では、この種の問題の診断に関して最近発表された論文2つについてハイライトをあてたいと思います。

 

最初の2つの論文 [1,2] は、Duke University と IBM Almaden の調査員によるジョイント論文で、DIADS というパフォーマンス診断ツールのプロトタイプについて説明しています。

このツールは、データベースサーバー(著者はテストシステムとして Postgres を使用しています)が、SAN (Storage Area Network) をディスクリソースに利用した場合のパフォーマンス問題の診断支援のために設計されたものです。

SAN の問題は、これが複雑で、かつ、ディスクストレージ(pools または volumes)の論理ユニットにより構成された独立したシステムで、通常複数のアプリケーション/データベースに同時にサービスを提供するという点にあります。

非常に多くの場合、 SAN の管理は独立して行われるため、データベース管理者は SAN を「ブラックボックス」として扱うことを余儀なくされます。

 

注釈つきプラングラフ を使った、特定のクエリープランオペレーターによるSANのリソースの使用状況を表示するDIADS という診断システムのプロトタイプは、Borisov et al. 氏が、開発しました。

DIADS は、コンフィギュレーション依存分析と兆候シグネチャーを使用して、特定の注釈つきプランを詳細にドリルダウンします。 また、同じクエリーのアクセスプランを比較し、各オペレーターの平均時間からの偏差をベースにメトリクスを計算することができます。

物理的、論理的コンフィギュレーションの詳細を含めたSAN モニタリングデータ、コンポーネント接続性、時間経過によるコンフィグレーション変更、データベース管理者が定義したイベントなどは、注釈つきクエリープランに含まれており、データベース管理者が、ひとつのディスプレイ内で、SAN 統計の詳細と一緒に実際の特定のプランオペレーターのパフォーマンスの特徴分析ができるようになっています。

DIADS には、ナレッジベースも含まれており、相互に関連し依存するプランオペレーター、相互に関連するオペレーターカーディナリティー、そして原因 vs 効果の分析を支援する兆候データベースなど、トラッキングを通じたプランオペレーターパフォーマンス診断のエキスパートシステム分析が可能になっています。

 

2つめの論文は、HP ラボの Goetz Graefe氏、Harumi Kuno氏、そして Janet Wiener 氏によるもので、彼らは、クエリー実行エンジンの堅牢さレベルの決定の問題、つまり、様々な予期しないランタイムの条件下において一貫性のあるパフォーマンスを提供するサーバーの能力に関する研究について述べています。

例えば、リソースコンテンションやカーディナリティー見積もりのエラーなどです。

著者は、クエリー実行の堅牢性は、そのクエリーオペレーターの基礎自体と同様に重要であると論じています。- それについては私ももちろん同感です。

 

著者のアプローチは、プランロバストネスマップをビジュアルに使用することでプランオペレーターの堅牢性について説明するもので、全体作業量が増加するにつれ、またはシステムのリソースが制約されるにつれ、いかに特定の実行戦略がデグレードするかの理由にこれらの2D、または3Dのグラフを使用することができます。

 

ここで採用されているビジュアル化の技術を反映することで、これらのダイアグラムにより予測されるパフォーマンスの迅速な証明、仮説のテスト、代替のクエリー実行プランの相対的、絶対的パフォーマンスの洞察が可能になります。

また、とてもシンプルなクエリーであっても、過多なクエリー実行プランがあります。パラメータースペースにわたって複数のディメンションで多くのプランを調査するのは、効率的なビジュアル化によってのみ可能です。

 

この作業は、他の作業を賞賛するオプティマイゼーションの品質、あるいはon-the-flyでのSQL リクエストの動的な再オプティマイゼーションに対応するクエリー実行パフォーマンス、つまり、システムパラメーターの特定のセットの最適なプランを見つけるそのシステムのオプティマイザーの能力、に対する興味深い見方を提供してくれます。

 

[1] Nedyalko Borisov, Shivnath Babu, Sandeep Uttamchandani, Ramani Routray, and Aameek Singh (January 2009). Why did my query slow down?In Proceedings, 4th Biennial Conference on Innovative Data Systems Research (CIDR), Asilomar, California.

 

[2] Nedyalko Borisov, Shivnath Babu, Sandeep Uttamchandani, Ramani Routray, and Aameek Singh (February 2009). DIADS: Addressing the “My-Problem-or-Yours” Syndrome with Integrated SAN and Database Diagnosis. In Proceedings of the 7th USENIX Conference on File and Storage Technologies (FAST'09), San Francisco, California.

 

[3] Goetz Graefe, Harumi Kuno, and Janet L. Wiener (January 2009). Visualizing the robustness of query execution. In Proceedings, 4th Biennial Conference on Innovative Data Systems Research (CIDR), Asilomar, California.

 

 

 

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

過去のブログ記事より: セットレベルオペレーションは大いに関係します。

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2014/01/22/from-the-archives-set-level-operations-do-matter

 

 

 

この記事のオリジナルは、Glenn Paulleyがsybase.com に2008年5月に掲載したものです。Glenn はこの中でデータ量が大量の場合には、セットオペレーションがパフォーマンスにたいへん効果的であると語っています。

 

Hibernate object persistance library が提案するアドホックなリレーショナルマッピングが起こす問題の1つに、サブクエリーを含むクエリーの生成 - 時に非常に大量 -があります。サブクエリーは、最適化するのが非常に難しく、なぜならばそのコストと選択性を見積もることが依然としてたいへんチャレンジングな研究課題であるからです。

 

SQL Anywhere には、サブクエリーに対して、たいへん洗練されたクエリーリライトオプティマイゼーションの機能が備わっています。しかしながら、SQL Anywhere を含む多くの商用製品におけるサブクエリーの最適化と実行には、依然として問題があります。

 

今週、私はあるお客様のアプリケーションにおける問題特定を行いました。このブログ記事において伝えたいのは、サブクエリー実行のインパクトは、アプリケーションのスケーラビリティに影響するかもしれないという点において明確だということです。

 

これまで様々なアプリケーションの複雑なクエリーを見てきた中で、それらに共通して見られるのは、サブセレクトまたは複雑なクエリー内の abstruct の測定にユーザー定義関数を活用する傾向があることです。今日分析した複雑なクエリー - 手で書かれたもの - は、複雑なビューの 4 方向の join で、最初のビュー自体が複雑なビューであり、サブクエリーを join にコンバートする最適化をリライトした後でさえ、サブクエリーが48含まれていました。全てではありませんが、サブクエリーのほとんどは、下の形でした。

 

 

  1. SELECT<select  list from T>, 
  2.       (SELECT R.X 
  3.                 FROM
  4.         WHERE R.PK = T.X) 
  5. FROM

 

このサブセレクトは、単一のローを確実に返すようになっています。なぜならば、サブセレクトの WHERE 句は、テーブルR のプライマリーキーカラムをカバーするからです。そして、もしT.X がNULL の場合、このサブセレクトは NULL 値を返します。これらのプロパティは、上記の nested query が outer join クエリーに相当することを意味しています。

 

 

  1. SELECT<select list from T>, R.X 
  2. FROM T LEFTOUTERJOIN R ON (T.X = R.PK) 

 

構成間のパフォーマンスの違いを説明するために、実際のお客様のデータベースを使用して、上の例と似ている構成のクエリーを実行してみました。

私のテストでは、テーブル T は、ローが 635K 行で、テーブル R は、11000万行のローから成るシングルベースのテーブルのビューでした。上の例と少しだけ異なるのは、テーブル R は4 カラムで成るキーがあり、それゆえにサブセレクトと left outer join の ON 条件の両方の検索条件に、4つの等号条件(equality predicate)が含まれていました。

 

クエリーの構成が間違いなくそのままであるように、一方でクライアント・サーバー伝送コストをなくすように、上のクエリーをderived テーブルに encapsulateし、それぞれのケースで aggregate 関数を使用して最終結果セットを単一のローに制限しました。FETCHTST ユーティリティーを使用して実行時間を比較しても良かったのですが、DBISQL からの実際の統計とグラフィカルなプランを使用して、それぞれの実行に関する詳細統計をとらえました。

 

結果は、

  • 1つのサブクエリーとしては、リクエストは15.29 秒で完了しました。サブクエリーのメモ化はこのリクエストではpay off しませんでした。なぜならば、T からの相関値は(ほとんど)ユニークで、その結果として前にメモ化した結果は、その後に続く呼び出しには使用できませんでした。
  • 1つの outer join としては、単一の CPU (スレッド) で、クエリーは 7.92 秒で実行できました。理由は: left outer join は、nested-iteration セマンティクスを避けるからです。クエリー内並行処理が有効な場合(デフォルト)、クエリーの実行時間は、parallel hash outer join を使用した結果 2.16 秒に落ちます。
  • 最後に、サブセレクトを PSM ユーザー定義関数としてリライトしました。これは、もう1つのテクニックで、SQL 文内のロジックをencapsulateするのによく使われる方法です。この関数は、下のようなものです。

 

 

  1. createfunction dba.foo(in @x integer, in @y integer, in @w integer, in @z integer) returnschar(1) 
  2. begin 
  3.   declare @lResult char(1); 
  4.   if ISNULL(@x,-1) = -1 thenreturn'N'end if; 
  5.   select R.X into @lResult 
  6.           from
  7.           where R.PK1 = @x 
  8.           and R.PK2 = @y 
  9.           and R.PK3 = @w 
  10.           and R.PK4 = @z; 
  11.   return(@lResult) 
  12. end 

すると、クエリーは下のようになります。

 

 

  1. selectmax(dt.a), max(dt.y) 
  2.     from ( select T.a, foo(Tx, T.y, T.w, T.z ) as y from T ) as dt 

 

 

このクエリーの実行時間は、およそ 6 分(320 秒)でした。

なぜでしょうか? この関数のプリアンブル内の条件的なロジックは、クエリー内へのインラインを防ぎ、実行コストにはユーザー定義関数に必要な実行コンテキストの構成/分解、そして、ユーザー定義関数の SELECT 文の周期的な再最適化が含まれるからです。

 

ここで学んだことは何でしょうか? セットレベルオペレーションは、データまたはトランザクションの量が少ない場合には重要ではありません。しかしながら、このパワーはデータ量が大きい場合に効力を発揮します。お客様のマイレージは、もちろん様々異なります。リレーショナルデータベースシステムではこれらの構成をより効率的に実行できないのでしょうか? 答えは、できます。しかしながら、このレベルの洗練性を実装するには、かなりの時間がかかるでしょう。

 

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

過去のブログ記事より: SQL Anywhere で再帰クエリーを使用する

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2014/02/05/using-recursive-queries-with-sql-anywhere

 

(この記事では英語版のSQL Anywhere が使用されていますが、SQL Anywhere は日本語にローカライズされています。)

 

この記事のオリジナルは、Glenn Paulleyが sybase.com に2009年4月に掲載したものです。Glenn はこの中で再帰クエリーが一般にはどのように機能し、さらにSQL Anywhere ではどのように機能するのか説明しています。

 

再帰 SQL クエリー (あるいは bill-of-materials、transitive closure queries) は、SQL Anywhere ではversion 9 よりサポートされています。再帰 SQL に関しては、下の[1] を含め、オンラインや書籍の形で様々なリソースが提供されていますが、特にここでお伝えしたいのは、下のものです。

 

  • SQL Anywhere の実装と、ANSI/ISO SQL: 2008 標準の再帰クエリーシンタックスの間の(マイナーな)違い;
  • 再帰クエリーをアプリケーションで活用する場合に考慮すべき 3つの接続オプション設定; そして
  • 再帰クエリーのグラフィカルなプランの簡単な説明

 

再帰クエリーを Hibernate でどのように使用するかは後で説明します。というのは、Hibernate の HQL 言語は再帰は直接サポートしていないからです。

 

 

下は、シンプルですが、再帰クエリーを説明するのに良い例です。SQL Anywhere のサンプルデータベース、demo.dl に対して、全 manager のリストと、それぞれの manager によって管理されている employee の数を作成します。

demo.db の employee テーブルを見ると、bill-of-materials の性質の問題を示しているのがわかります。それぞれの employee が、自分の manager に対して自己参照する外部キーになっており、全てではありませんが、ほとんどの manager に managerが存在します。Employee テーブルから直接的に直属 manager をリストすると下のようになります。


 

問題は、このシンプルな結果セット - 冗長な ManagerID はとりあえず無視します - では、employee 501 と 1293 には manager が存在せず (彼らは、「自分自身をmanage します」)、902 が1293 の部下で、703 と 1576 は 902 の部下であることを示していないということです。つまり、それぞれのカウントは、彼らの manager のものとの総計になっていなければなりません。

 

求める結果セットは、以下になります。

 

 

Manager IDcount(*)
50122
7038
157615
90243
129353

 

問題は、再帰クエリーにどのように計算させるか、です。

 

標準再帰 SQLの基本

 

SQL における再帰は、再帰のとても特別な形です; Jim Melton 氏と Alan Simon 氏が、標準SQL の実装についてとても役に立つ説明を[1] (section 9.13) でしています。要約すると、以下で再帰 SQL クエリーを形成します。

  1. 最初の結果セットを seed クエリーとともに構成する。それから
  2. そのSELECT文内のテーブル参照の1つとして再帰中間結果を使用して、二番目のクエリースペックでその結果セットに追加のローをUNION する。

 

 

再帰の実行は、fixpointに到達すると停止します。Semmle's .QL query language のベースになっている Datalog などの関数型プログラミング言語では Fixpoint セマンティクスがより共通的に使用されています。ANSI SQL 標準 [1]では、fixpoint セマンティクスは、以下のような状況では緩く定義されています。

.....結果にインサートするより多くのローを特定する努力の過程でそのような追加ローがないことがわかる場合

ANSI SQL 標準では、再帰クエリーは WITH RECURSIVE 句を含む共通テーブル表現を使用して形成されています。下は、修正された再帰クエリーに関連する SQL 文法のサブセットです。

 

  1. <query expression>::= [ <with clause> ] <query expression body> [ <order by clause>
  2. <with clause>::= WITH [ RECURSIVE ] <with list> 
  3. <with list>::= <with list element> [ { <comma><with list element> }... ] 
  4. <with list element>::= <query name> [ <left paren><with column list><right paren> ] AS <table subquery> [ <search or cycle clause>
  5. <with column list>::= <column name list> 
  6. <query expression body>::= <query term> 
  7.     | <query expression body> UNION  ALL <query term> 
  8. <query term>::= <query primary> 
  9. <query primary>::= <simple table> 
  10.     | <left paren><query expression body> [ <order by clause> ] <right paren> 
  11. <simple table>::= <query specification> 
  12. <order by clause>::= ORDER BY <sort specification list> 

 

再帰クエリーは、以下のように制限されています。

 

  • SQL 標準では、再帰クエリー表現は、UNION ALLに制限されています。さらに、各仮想再帰テーブルは、そのテーブルの定義において多くとも1度しか参照される可能性はありません。
  • ANSI SQL 標準では、単調進行(monotonic progressions)しか許していません。つまり、再帰が継続すると、(仮想)再帰テーブルはサイズの拡大しか許されません。
  • 単調性の結果、(仮想)再帰テーブルからのローは(例えばSELECT DISTINCT 経由で)取り除くことも、(仮想)再帰テーブル内の既存ローを on-the-fly で修正することもできません。

 

標準 SQL には、(1) サーチオーダー経由のトラバーサルがDEPTH FIRSTBREADTH FIRST かを特定する追加のシンタックス、そして(2) 暴走クエリーを防ぐために再帰計算の制限を特定するシンタックスが含まれます。

このSQL 標準からの追加のシンタックスは、下のとおりです。

 

  1. <search or cycle clause>::= <search clause> 
  2.     | <cycle clause> 
  3.     | <search clause><cycle clause> 
  4. <search clause>::= SEARCH<recursive search order> SET <sequence column> 
  5. <recursive search order>::= DEPTH FIRST BY <column name list> | BREADTH FIRST BY <column name list> 
  6. <sequence column>::= <column name> 
  7. <cycle clause>::= CYCLE<cycle column list> SET <cycle mark column> TO <cycle mark value> DEFAULT <non-cycle mark value> USING <path column> 
  8. <cycle column list>::= <cycle column> [ { <comma><cycle column> }... ] 
  9. <cycle column>::= <column name> 
  10. <cycle mark column>::= <column name> 
  11. <path column>::= <column name> 
  12. <cycle mark value>::= <value expression> 
  13. <non-cycle mark value>::= <value expression> 

 

将来のリリースでの対応の可能性はありますが、SEARCHCYCLE句も SQL Anywhere ではサポートしていません。

 

また、再帰クエリーは、bill-of-material の問題である non-procedural 計算を許していることに注意してください。例えば、結果セットがそれ以上は大きくならないところまで、結果セットにローを追加し続け、永遠にループするストアドプロシージャーを使用するなど、再帰結果セットを呼び起こすことを妨げるものはありません。

実際、まさにこれが、初期のバージョンのSemmle's .QL 言語での、Microsoft SQL Server データベースをバックエンドとした再帰クエリーの処理方法です。しかしながら、再帰 UNION クエリーをとおして結果を計算する方が、ずっとシンプルで効率的です。

 

例に戻ると

 

そのため、ANSI SQL モデルが強いる再帰における制限 ---  モノトニシティ と non-negation(否定)--- を考えると、意図した結果(集約された employee 数)をse毎の単一の再帰クエリで生成するのは、直接的にはできないことが明らかです。我々がしなければならないことは、構成されたら、再帰を使用して中間結果を構成することです。

必要なことは、一度構成されれば必要な結果を生成することができる別のクエリへのインプットとして使用することが可能な中間結果を再帰を使用して構成することです。

上記のANSI 再帰 SQL クエリの説明において、seed を展開し、そのローと(仮想)再帰中間結果を UNION し、再帰クエリ表現を呼び出すことが必要だと述べました。我々のケースでは、seed クエリーは、上で説明したシンプルな GROUP BYクエリーで、直属の manager の employeeの数を計算します。

しかし、我々ができることは、management ヒエラルキーを反映する追加の中間結果ローを生成することです。つまり仮想再帰結果セットにおいて、2つの属性(EmployeeID と ManagerID)が必要だということです。

これらの直属の manager でスタートすることで、同じ employee のカウント数を含む追加ローを追加することができますが、これは管理者チェーンの次の manager のためです。

 

完全なクエリーと生成された結果セットは下のとおりです。

 

 

この中間結果について、いくつか特別なポイントがあります。

  • テーブル表現 FROM Employees e JOIN EmpsByManager em ON (e.EmployeeID = em.ManagerID)は、Employees テーブルと manager の (仮想) テーブルを join し、より上層の manager にレポートする employee をドキュメントする追加ローを作成します。
  • 制限条件である WHERE e.ManagerID <> e.EmployeeIDは、自身を管理するmanager のローが再度含まれるのを防ぎます。デモデータベースでは、自身を管理する manager は外部キー値(ManagerID)を同じローに使用して特定することができます。反対に、トップレベルの manager を表しているローで NULL値を使用しているのであれば、この追加句は必要ありません。

 

この中間結果が計算されたので、求める最終結果の作成は直接的に、シンプルに下のラインを

 

  1. SELECT * FROM EmpsByManager 

下のラインでリプレースします。

  1. Select ManagerID, sum(TotalEmps) From EmpsByManager Groupby ManagerID 

SQL Anywhere における条件

 

SQL Anywhere では、再帰クエリーに関連するものとして注目に値する接続オプションが 3 種類あります。

 

  • SQL Anywhere では、CYCLE句はサポートしていませんが、再帰クエリーのインタラクションが超過した場合に (デフォルトは 100です)、暴走再帰クエリーを SQLerror で停止する MAX_RECURSIVE_ITERATIONS の接続オプションを提供しています。ある特定のクエリーで必要な再帰の数は、再帰のヒエラルキーの深さに等しくなければなりません。多くの状況では、これは、ほぼ間違いなく、100よりかなり少なくなります。この接続オプションを小さな値に設定すると、暴走クエリーの異常なリソース消費を防ぐことができます。
  • SQL Anywhere には、さらに2つの追加接続オプションが用意されています。MAX_TEMP_SPACETEMP_SPACE_LIMIT_CHECK です。これらは、再帰クエリーが間違っている場合のカタストロフィックサーバー問題を避けるのに役立ちます。最初のオプションは、サーバーがTEMPファイルに無制限のスペースを使用するのを防ぎ、次のオプション TEMP_SPACE_LIMIT_CHECKは、テンポラリスペースの使用を接続毎に制限するサーバーガバナーのパラメーターです。

 

SQL Anywhere では、2つの特別なクエリー実行オペレーター Recursive Hash [Outer] Join と Recursive Nested-Loop [Outer] Join を使用して再帰クエリーを計算します。上記の再帰クエリーのグラフィカルなプランは下のようになります。

 

 

このプランでは、"seed" クエリーは再帰 UNION ALL オペレーター (RU) の左側にあります。RT は、再帰中間結果 "EmpsByManager" を含む(仮想)再帰テーブルを意味します。JHR は、再帰ハッシュジョインオペレーターを意味します。

SQL Anywhere サーバー内のその他全てのメモリー集中型のオペレーターのように、JHR はクエリー実行時間にメモリーがとても少なくなるか、または JHR オペレーターがこの join instance のための入力の カーディナリティ が cheapで、nested-loop な実行戦略を保証すると決定した場合に選択できる低メモリー代替戦略 --- 再帰 [outer] nested-loop join --- を持っています。

join 実行戦略におけるこの変更は、on-the-flyで実行されます。

 

理解する

 

再帰 SQL クエリーの呼び出しに苦労しているのであれば、便利なテクニックとして、最初の再帰のインタラクションをハンドコードし、そこから、何の属性と結果が(仮想)再帰中間結果に追加される必要があるかを決定する方法があります。上の例では、最初のインタラクションは以下のようになります。

 

 

join する3つのローから、Employee テーブルとの join によって特定されるような 上層部の manager の(直属の managersのための)seed クエリーで以前に生成されたローの数のカウントを含む追加のローを UNION できるということがわかります。

 

再帰クエリーのさらなる例については、SQL Anywhere サーバー マニュアル または オンラインマニュアル DocCommentXchangeをご参照ください。

 

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

過去のブログ記事より: jConnect と iAnywhere (現SQL Anywhere) JDBC ドライバーの違い - パート1

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2014/07/02/differences-between-jconnect-and-the-ianywhere-jdbc-driver--part-un

 

この記事のオリジナルは、Glenn Paulleyが sybase.com に 2009年3月に掲載したものです。この中で、Glenn は jConnect と SQL Anywhere JDBC ドライバーの違いについて述べています。最近 jConnect、JDBC、SQL Anywhere の過去の特定のバージョンにおけるサポートについてまとめましたが、versions 12 と 16 の SQL Anywhere JDBC ドライバーでは、 JDBC 4.0 をサポートしていることをここでお伝えしたいと思います。また、最新の jConnect のバージョンは 7.07 で、こちらも JDBC 4.0 をサポートしています。



最近、私は Sybase jConnect と、iAnywhere (現 SQL Anywhere) JDBC ドライバーとの違いについて質問を受けました。そこで、ここでポイントをまとめておこうと思います。いずれテクニカルドキュメントとしてまとめたいと思います。

 

 

概要:

 

2つのJDBC の実装の違いについて、簡単にまとめると以下にとおりです。

  • jConnectは、Type 4 JDBC ドライバです。 一方、iAnywhere (現 SQL Anywhere ) JDBC ドライバは Type 1 で、適切にインストールされた ODBC ドライバーの存在に依存します。
  • jConnect は、Sybase Tabular Data Stream (TDS) ワイヤプロトコル を使用しています。一方、iAnywhere (SQL Anywhere) JDBC ドライバは、CMDSEQ と呼ばれるネイティブでプロプライエタリの SQL Anywhere アプリケーションレベルプロトコルを使用しています。
  • SQL Anywhere は、TCP/IP ネットワークプロトコルでは、TDS のみをサポートしています。それとは異なり、 SQL Anywhere-specific の CMDSEQ プロトコルは、TCP/IP も、同一コンピューター通信用に設計された効率的なシェアードメモリープロトコルも、どちらもサポートしています。
  • アプリケーションが SQL Anywhere に jConnect 経由で接続されると仮定すると、TDSを使うことになり、Sybase ASE の動作を望んでいることになります。そのため、SQL Anywhere のjConnect の実装では、アプリケーションがデータベースに接続するとすぐに ASE 互換の設定セットを設定するようサポートされています(以下参照)。
  • jConnect の様々な動作は、Sybase ASE (現SAP ASE)のネイティブサポートに由来します。これは、jConnect がカーソルと特定のデータタイプ(詳細は後で述べます) をサポートしていることに特に明白です。

 

 

JDBC ドライバータイプ

 

jConnect は、Type 4 JDBC ドライバーで、完全に Java ベースです。反対に、iAnywhere (現 SQL Anywhere) JDBC ドライバーは、Type 1 ドライバーで、ベースとなる実際に SQL Anywhere サーバーと通信する (non-Java) のODBC ドライバーに依存します。iAnywhere (現 SQL Anywhere) JDBC ドライバーも、jConnect 6.0.5 も、JDBC 4.0 準拠です。

 

SQL Anywhere Version 11 では、JDBC 3.0 (JDK 1.4 以降) しかサポートしていません。SQL Anywhere Version 10 では、JDBC 2.0 と 3.0 の両方をサポートしています。Version 10 で出荷される jodbc.jar は、どちらのサポートも含まれますが、どちらのバージョンが使用されるかは、ドライバーの名前に依存します。

  • iAnywhere.ml.jdbcodbc.idriver は JDBC 2.0 をサポートします。
  • iAnywhere.ml.jdbcodbc.jdbc3.idriverは、JDBC 3.0 をサポートします。

 

Windows CE上の Java アプリケーションを活用したい場合には、jConnect 5.5 の方がベストの選択でしょう。Windows CE では、Java VM としてベストなのは IBM の J9 VMと「Mobile Database Option」で、(JDK Version 1.3 の) JDBC 2.0 をサポートします。しかしながら、jConnect 5.5 だけが JDBC 2.0-準拠---jConnect 6.05 と SQL Anywhere 11 は JDBC 3.0 が必要 --- なので、jConnect 5.5 (jconn2.jar) をデバイスにインストールする必要があります。

 

どのプラットフォームでも、SQL Anywhere で jConnect を使うには、データベース内に jConnect の JDBC メタデータスキーマのインストールが必要になります。デフォルトでは、SQL Anywhere データベースは、jConnect メタデータのサポートで生成されますが、dbupgrad -j で明示的に追加することができます。

 

 

接続オプション

 

jConnect 経由で接続する場合には、SQL Anywhere サーバーは、自動的にいくつかのオプションの設定の値をリセットして、サーバーが ASE の動作をエミュレートできるようにします。これは、sp_tsql_environment システムプロシージャー内で起こりますが、以下の SET OPTION文を実行して接続します。

 

  1. SETTEMPORARYOPTION allow_nulls_by_default='Off'
  2. SETTEMPORARYOPTION ansi_blanks='On'
  3. SETTEMPORARYOPTION ansinull='Off'
  4. SETTEMPORARYOPTION chained='Off'
  5. SETTEMPORARYOPTION close_on_endtrans='Off'
  6. SETTEMPORARYOPTION date_format='YYYY-MM-DD'
  7. SETTEMPORARYOPTION date_order='MDY'
  8. SETTEMPORARYOPTION escape_character='Off'
  9. SETTEMPORARYOPTION isolation_level='1'
  10. SETTEMPORARYOPTION on_tsql_error='Continue'
  11. SETTEMPORARYOPTION quoted_identifier='Off'
  12. SETTEMPORARYOPTION time_format='HH:NN:SS.SSS'
  13. SETTEMPORARYOPTION timestamp_format='YYYY-MM-DD HH:NN:SS.SSS'
  14. SETTEMPORARYOPTION tsql_variables='On'

 

接続の初期またはデフォルトの値は、保持されないことに注意してください。また、TDS 接続のデフォルトの分離レベルは、「1」(READ COMMITED 確定した最新データを常に読み取る ) であることに注意してください。DBISQL と Sybase Central の古いバージョンでは、SQL Anywhere セマンティクスをできるだけ多く保持するために、データベースサーバーに接続した後にこれらのテンポラリオプション設定を undo にします。そのため、違いについては気づかないかもしれません。新しいバージョンの DBISQL と Sybase Central 管理ツール (SQL Anywhere Version 10 以降) では、jConnect 経由での接続はサポートしていません。

 

次は、: jConnect と iAnywhere (現 SQL Anywhere) のセマンティックとパフォーマンスの違いについて述べます。

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

過去のブログ記事より: jConnect と iAnywhere (現SQL Anywhere) JDBC ドライバーの違い - パート2

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2014/07/09/differences-between-jconnect-and-the-ianywhere-jdbc-driver--part-deux

 

 

この記事のオリジナルは、Glenn Paulleyが sybase.com に 2009 年 10 月に掲載したもので、この中で Glenn は jConnect と SQL Anywhere JDBC ドライバーの違いについて述べています。 パート 1 のブログ記事でも追記しましたが、versions 12 と 16 の SQL Anywhere JDBC ドライバーでは、 JDBC 4.0 をサポートしています。また、最新の jConnect のバージョンは 7.07 で、こちらも JDBC 4.0 をサポートしています。

 

 

パート1 のブログ記事では、SQL Anywhere で使用する場合の jConnect JDBC ドライバーと iAnywhere (現SQL Anywhere) JDBC ドライバーの違いを簡単に述べました。また、ホワイトペーパーでは、この 2 つのドライバーのアーキテクチャー的な違いについてまとめています。

 

jConnect も、iAnywhere (現SQL Anywhere) JDBC ドライバーも JDBC 3.0 をサポートしています。 jConnect は、「pure Java」のソリューション (Type 4 JDBC ドライバー)で、iAnywhere (現SQL Anywhere) JDBC ドライバーは、Type 1 ドライバーです。これは、iAnywhere (現SQL Anywhere) JDBC ドライバーが SQL Anywhere ODBC ドライバーに依存しているからで、SQL Anywhere ODBC ドライバーが適切にインストールされている必要があります。

「pure Java」のソリューションの方が、良い/速い/より堅牢であると言われることもあることから、 jConnect の方が iAnywhere (現SQL Anywhere) Type 1 ドライバーよりも良いように思われますが、深く知るにつれて、2つのソリューションの間に (1) メモリーの管理、(2) TDS ワイヤプロトコルの使用、(3) セマンティクスが違う、という大きな違いがあることを認識されると思います。ここでは、それらについて説明します。

 

 

メモリー管理

 

pure Java ソリューションでは、

 

  • 全てのオブジェクトは、Java 仮想マシンが管理します。
  • Java ガベージコレクションは、自動的にクリーニングを実施するので、アプリケーションプログラマーは、不明瞭なオブジェクト、メモリーリーク、使用中のオブジェクトの消失、などについて悩む必要はありません。

 

残念ながら、pure Java のソリューションの弱点は、結局同じで、メモリー管理です。アプリケーションプログラマーは、オブジェクトのライフスパンに対して、ほとんど、あるいは全くコントロールすることができません。さらに、プログラマーは、ガーベージコレクションも、効果的にコントロールすることができません。ガーベージコレクションは、重要な時でも Kick inすることができてしまうため、再現不可能なパフォーマンス問題がランダムに発生してしまいます。

 

そのため、iAnywhere  (現SQL Anywhere) JDBC ドライバーのようなハイブリッドのソリューションにおける最も重要な利点は、メモリー管理です。

  • プログラマーは、non-Java のオブジェクトに対してフルにコントロールを維持できます。
  • ガーベージコレクションは、Java オブジェクトへの non-Java リファレンスによって妨げるあるいは延期することが可能です。

 

しかしながら、pure Java であるがゆえ、ハイブリッドのソリューションで最も不利な点は、ご想像のとおり、これもまた、メモリー管理です。ハイブリッドのソリューションでは、non-Java オブジェクトは、明示的に管理する必要があります。プログラムエラーは、良くてもメモリーリーク、メモリー破損、最悪の場合には、GPF になります。もし Java オブジェクトリファレンスが、あまりにも長く保持される場合には、Java ガーベージコレクションは Kick in しません。

 

 

CMDSEQ v.s. TDS

 

jConnect は、Sybase (現SAP) ASE のネイティブのワイヤプロトコル、Tabular Data Stream (TDS) プロトコルを使用します。一方、iAnywhere (現SQL Anywhere) JDBC ドライバーが使用する iAnywhere プロトコルは、SQL Anywhere のネイティブのワイヤプロトコルで、Command Sequence (CMDSEQ) と呼ばれています。

 

これら 2 つの間には、セマンティックとパフォーマンスの両方に違いがあります。

それぞれにプラス面とマイナス面がありますが、TDS の利点は、「fire hose (消化ホース)」カーソルをサポートしていることです。つまり、TDS 言語の一つのコマンドトークンで、サーバーに対してステートメントを実行して全結果セットを記述し、全結果をまとめてクライアントに返すよう指示できます。アプリケーションが結果セットの全ローを要求する状況では、fire hose カーソルは、ワイヤ上の往復トラフィック量を減らすことでパフォーマンス上のメリットを提供しますが、これには、マイナスもあります。

 

結果セットをキャッシュする責任を持つのはクライアントであり、カーソルのスクロールを実装しなければならないのはクライアントです。TDS クライアントは、Java アプリケーションがスクロールできる -- 前後のどちらも-- 結果セット内のローの "window" をサポートします。しかしながら、この window 外のローの範囲を超えるスクロールが発生する場合には、サーバーに対して全リクエストを再発行します。--- "window" 外の以前のローは消失してしまっているため、必ず必要です。

そのため、このスクロール可能なカーソルのモデルでは、カーソルセンシティビティーセマンティクスを保証することは不可能です。

さらに、とても大きな結果セットでは、クライアントが返されたローを高速で処理できない場合、通信ストリームはブロックされてしまい、サーバーをブロックすることになります。

fire hose カーソルは、正しい周辺環境下であれば、 jConnect 接続におけるメリットを提供できますが、最近追加された CMDSEQ における adaptive prefetching (下参照) のサポートを考えると、このメリットも色あせて見えます。また、最近 jConnect を超える優れた機能が iAnywhere  (現SQL Anywhere) JDBC でサポートされるようになっています。

 

いくつかを下に挙げます。

  • TDS は、ローカル接続でも TCP/IP に限定されます。一方、iAnywhere  (現SQL Anywhere) JDBC ドライバーは、TCP/IP でも、シェアードメモリーでも使うことが可能です。jConnect アプリケーションを使用している場合、ローカルデータベースを自動的にスタートしてストップすることはできません。なぜならば、このローカルデータベースの自動スタートとストップは、シェアードメモリー接続でのみサポートされているからです。
  • RSA、RSA-FIPS暗号化テクノロジーなどの強力な暗号化をサポート。
  • サーバーサイドのカーソルを完全にサポート。jConnect はサーバーサイドのカーソルはサポートしていません。クライアントが、その結果セットから少しのローしか使用しない場合でも、全体結果セットをネットワーク越しに retrieve することでクライアントサイドのカーソルを実装します。jConnect アプリケーションを使用する場合には、アプリケーションプログラマーは、SQL クエリーを注意深く書き、最初の数ローをFETCHing するのみに頼らず最小の結果セットを返す必要があります。なぜならば、全結果セットは、各SQL リクエストでクライアントに送られるからです。
  • AppInfo の完全なサポート。jConnect は、AppInfo の詳細を truncate します。
  • Windows プラットフォームの統合ログイン。
  • よりリッチなバッチ SQL 文のサポート - 例えば、ワイド (バッチ) インサートやワイドフェッチ。SQL Anywhere では、jConnect はワイドフェッチのみ完全にサポートしています。jConnect は、アプリケーションからのワイドインサートをサポートしており、ネットワークのトラフィックを削減しますが、サーバーでは、TDS ワイドのインサートがシミュレートされ、各ローが異なるINSERT 文を開始します。反対に、iAnywhere  (現SQL Anywhere) JDBC ドライバーでは、ワイドインサートとワイドフェッチの両方を効率的にサポートします。

 

 

CMDSEQ における Adaptive prefetching

 

SQL Anywhere version 11 では、CMDSEQ 接続におけるプリフェッチの動作のバリアントとして、adaptive prefetch が導入されました。プリフェッチは、クライアントへのローのセットを FETCHrequest に先行して変換することによってクライアント・サーバー型の環境における通信を削減するよう設計されており、これがデフォルトで有効になっています。プリフェッチは、DisableMultiRowFetch 接続パラメーターを特定することによって、または、プリフェッチ接続オプションを OFF に設定することで無効にすることも可能です。プリフェッチは、センシティブな値のセマンティクスで宣言されたカーソルに対してOFF にします。adaptive prefetching では、SQL Anywhere CMDSEQ クライアントは、アプリケーションの動きによって、プリフェッチされたローの数を自動的に - 増加または減少 -調整します。プリフェッチされるローの最大数のハードリミットは、1000です。Adaptive prefetching はまた、1 経過秒でアプリケーションが FETCH できるローの数によってコントロールされます。Adaptive prefetching では、以下のカーソルは有効になっています。

  • ODBC および OLE DB: FORWARD ONLY, READ ONLY (デフォルト) カーソルタイプ; ESQL: DYNAMIC SCROLL (デフォルト), NO SCROLLおよびINSENSITIVE カーソルタイプ; 全 ADO.Net カーソル
  • FETCH NEXT オペレーションのみ done (絶対的ではなく、相対的、または backwards フェッチング)。
  • アプリケーションは、フェッチ間のホスト変数タイプを変更せず、GET DATAを使用して、チャンクになったカラムデータを入手することはありません。 (しかし、GET DATA1つ使用して、値が良いかどうかリトリーブします。)

 

 

jConnect セマンティクス

 

以前のブログ記事で述べた jConnect で接続した際のASE 相当の接続オプションの自動設定に加えて、jConnect には、他にもセマンティクスの違いがあります。

いくつか挙げると、

  • TDS プロトコロは、1753 年 1月 1日より前の日付やタイムスタンプはサポートしていません。
  • 固定長の CHARBINARY 値は、空白埋めのデータベースからのリトリーバル時に自動的にパッドされます。
  • jConnect の古いバージョンでは、空の文字列の値 -- 長さゼロの文字列 -- は、単一の空白が入った文字列としてアプリケーションに戻されます。これは、TDS の前のバージョンでは、空白の文字列とNULL の値を区別しなかったことによります。

 

もし JDBC アプリケーションで、jConnect を使用したいものの Sybase ASE ライクの動作は求めていない場合、アプリケーションは以下である必要があります。

  • これらのオプションを接続後テンポラリーで即座に設定することにより、sp_tsql_environment() システムプロシージャーが発行した接続オプション設定をリバート
  • 接続オプション RETURN_DATE_TIME_AS_STRING  を ON に設定し、SQL Anywhere にいつも DATE/TIME/TIMESTAMP 値を文字列として返させる。これにより、TDS が 1753 年 1 月 1 日よりも前の日付を扱えないことを解決します。
  • jConnect オプション "dynamic prepare" を TRUE に設定し、準備したステートメントが使用されるたびに再準備されないようにする。
  • 各ステートメント毎のカーソル名を設定し、 jConnect が fire-hose カーソルではなく TDS カーソルを使用するように強制する。SQL Anywhere では、 jConnect は、どのカーソルタイプが使用されるにかかわらず、クライアントに結果セットをキャッシュすることに注意してください。
  • ステートメント毎にフェッチサイズを明示的に設定し、jConnect が CMDSEQ プリフェッチの動作を疑似するようにする。
  • jConnect の古いバージョンでは、
    • 'single-blank string' は、empty 文字列として扱う。
    • 古い jConnect のリリースでは、サインされていない値はサポートされていないため、使用されていないデータタイプは使用しない。

 

続くブログで、jConnect と iAnywhere  (現SQL Anywhere) JDBC ドライバー間のパフォーマンスの違いの概要について述べる予定です。時にアプリケーションの性格とアプリケーションが発行する JDBC API の正確な呼び出しという2つの要因に依存することはありますが、私たちのお客様のアプリケーションでの経験では、ほとんどのお客様が iAnywhere  (現SQL Anywhere) JDBC ドライバーに切り換えたことでパフォーマンスを大幅に向上しています。

 

この記事のバックグラウンドを提供してくれた同僚の Karim Khamis に感謝します。

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

Oracle は、初のクラウド向けマルチテナンドデータベースなのか?

$
0
0

このページは、2013年7月に公開された以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2013/07/26/is-oracle-really-the-first-multi-tenant-database-for-the-cloud

 

 

最近のOracle 12c のリリースは、その目玉となる機能、プラガブル(Pluggable)データベースに関して多くの議論を呼び起こしました。この機能が、2012年10月にアナウンスされた際には、「クラウド向けに設計された初のマルチテナントデータベース」として紹介されました。そしてそのすぐ後、アナリストグループの IDC は、その概要と反応についてレポートを公開しました。

www.oracle.comに掲載されたそのレポートでは、IDC のアナリストである Carl Olofson は以下のように述べています。

 

今回のアナウンスに対して、いくつかの議論がありますが... キーノートにおいて、Larry Elison はOracle Database 12c を「初のマルチテナントデータベース」であると紹介しました。 読者の皆様は、SAP がSAP Sybase SQL Anywhere クラウドエディションにおいて、マルチテナンシーの機能を 1年以上も前に発表していることにも留意ください。

 

(Olofson が参照した製品は、SAP SQL Anywhere, on-demand editionのことで、2011 年 10月にアナウンスされ、2012年 7月にリリースされています。)

 

Olofson は、続けて… データベースのコンテキストにおいて、マルチテナンシーの定義の基準がないため、この領域の議論は依然として続いています、と述べています。これに対して私も異論はありません。マルチテナンシーの用語は、多重定義されています。Oracle の主張の真相を調べるには、まず Oracle がこれをどう定義しているのか、そして、SQL Anywhere, on-demand edition の機能とどう似ているのかを理解することが必要です。

 

この記事を記憶される方は、Oracle Multitenant Datasheetで述べられている機能をベースにこの主張を調べることになるでしょう。このブログ記事の最初のドラフトでは、私はこのデータシートの全本文の「Oracle マルチテナント」を単純に全て「SQL Anywhere, on-demand」に置き換えて再現してみました。しかしながら、公正な使用に反することを懸念して、違うルートでいくことにしました(とはいえ、SQL Anywhere, on-demand edition に詳しい人間を呼び、Oracle データシートを読んでもらい、どう驚くか見てみたいものです)。

 

ここでは同じトピック領域で SQL Anywhere, on-demand edition の機能について述べ、Oracle 12c 機能との比較は読者の皆さんにお任せすることにします。

 

クラウドのための設計

 

SQL Anywhere, on-demand edition は、クラウド用に設計されたデータベースで、論理データベースサーバーは、オンデマンドで伸縮自在にスケールする複数のサーバーマシンにまたがって稼働することが可能です。独立した複数のテナントデータベースの各々は、ともにクラウドデータベースサーバーを作り上げる個々のサーバーに対してプラグインされます。アプリケーションは、特定のテナントデータベースに直接接続し、同じサーバー上の他のテナントデータベース全てに対して無関心です。これにより、セキュリティあるいは要求されるアプリケーション変更に妥協することなく、数多くの別々の SQL Anywhere データベースを一つのデータベースサーバー(またはサーバーのグループ)に統合できます。これは特に、ISV がSAAS のアプリケーションを作成する際に便利です。なぜならば、リソースを統合しながら、証明可能なデータセキュリティーモデルを使用することが可能になるからです。

 

効率的な統合

 

何年にもわたり、データベースの統合には仮想テクノロジーが使用されてきました。しかし、これはリソースの無駄遣いになります。なぜならば、OS とサーバープロセスが、それぞれのインスタンスで重複しているからです。SQL Anywhere, on-demand edition は、(メモリー管理やバックアッププロセスを含む) 一つのサーバープロセスを、それぞれのマシン上の複数のテナントデータベース間で共有します。独立したテナントデータベースのモデルであるため、テナントデータベース間のセキュリティーに妥協することなく、コンピューティングリソースを多いに活用することが可能です。

 

迅速なプロビジョニングとクローニング

 

SQL Anywhere, on-demand edition は、新しいサーバーと新しいデータベースの両方に対して、迅速なプロビジョニングを行う機能を提供しています。コンピューターのパワーがさらに必要な場合には、新しいマシンやサーバープロセスをデータベースサーバークラウドに数分で追加することが可能です。既存のライブのデータベースも、数秒のダウンタイムで新しいサーバーにマイグレーションすることが可能です。新しいテナントデータベースをプラグインするのも、お客様の既存のSQL Anywhere データベースを追加するのも同様にシンプルで、新しいブランクのデータベースを追加するか、あるいは既存のデータベースをクローンすることで実現可能です。既存のデータベースのクローンは、特に、追加テストの際に本番データベースのコピーが必要な場合に便利です。テストサーバー専用のクローンは、すぐに作成することができます。また、クラウドから一緒にアンプラグドして、スタンドアロンのSQL Anywhere サーバー上で稼働させることもできます。

 

迅速なアップグレードとパッチの適用

 

ソフトウェアのアップグレードとパッチは、バルクのオペレーションで同時に複数のサーバーにわたる複数のデータベースに適用することが可能です。このバルクオペレーションでは、きめ細かい制御も可能で、アップグレードをゆっくりロールアウトするために管理者が選択したデータベースにのみアップグレードすることも可能です。完全に新しいサーバーのバージョンにアップグレードする場合には、管理者は、単純にサーバーを最新のソフトウェアでスタートアップし、テナントデータベースを選択して新しいサーバーに移動させるだけです。

 

多くのデータベースを1つのものとして管理

 

SQL Anywhere, on-demand edition クラウドは、複数のマシンにまたがる、何千ものテナントデータベースを保有する可能性がありますが、システムは、1つのデータベースであるかのように管理することが可能です。すでに述べたバルクのオペレーションに加えて、バルクのバックアップや、リカバリーのような追加のオペレーションや、アドホックな SQL の実行により、管理者はこれまでにない管理パワーを得ることが可能です。バルクのオペレーションを通して、多くのデータベースに対して管理を実施することが可能ですが、同時に管理者は、データベースを個別に扱うパワーも持つことができます。例えば、データベースはバルクでバックアップするかもしれませんが、それぞれでリストアされるかもしれません。同様に、ある1つのサーバーのそれぞれのテナントデータベースに対して高可用性を設定するかもしれませんが、それぞれのデータベースは異なるミラーサーバーをターゲットにするかもしれません。このように詳細に適切にコントロールできることで、リソースを最大限に活用することが可能です。

 

クラウドへのプラグイン

 

既存の SQL Anywhere データベースを SQL Anywhere, on-demand edition クラウドにプラグインするのは簡単です。アップグレードのプロセスは必要ありません。データベースは、全く同一のものです。同様に、いつでもSQL Anywhere, on-demand edition からデータベースをアンプラグドし、SQL Anywhere のスタンドアロンサーバーとしてスタートすることが可能です。クラウド内の全ての管理は、クラウドコンソールツールを使用して管理することが可能です。また、データベースは通常のSQL Anywhere データベースなので、全ての既存のツール (SAP Sybase Central、アプリケーションプロファイリング、SQL Anywhere モニター)などが SQL Anywhere とSQL Anywhere, on-demand editionでは完全互換です。

 

 

Olofson が述べているように、データベースとクラウドのコンテキストにおけるマルチテナンシーの用語には多くの混乱があるにも関わらず、ここでのOracle の使用は、SQL Anywhere と同じです。このことから、Oracle の 12c が「クラウド要に設計された最初のマルチテナントデータベースである」という主張に対して議論があるという Olofson に対して同意せざるを得ません。

 

Oracle のマルチテナントクラウドデータベースにおける先行の噂は、たいへん誇張されているようです。

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。


SAP HANA SPS10 の新機能 --- SAP HANA remote data sync

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/hana-in-memory/blog/2015/06/25/what-s-new-in-sps10-sap-hana-remote-data-sync

 

SAP HANA のリモートデータシンク機能は、SAP HANA SPS10 に実装された全く新しいオプションです。そしてこれは同時に、市場に登場して10年以上経つ成熟したテクノロジーでもあります。

このブログ記事では、これで何ができるのか、3つの主な利用例を使用して概要を説明するとともに、使用方法についても少し説明します。

SAP HANA remote data sync をタイプするのはたいへんなので、以降は、RDSyncとします。

 

では、はじめましょう。

 

What it does - これは何をするのか

 

RDSync のポイントは、技術的には、SAP HANA と多くのリモートデータベースの間のデータを同期できるということです。

この文のそれぞれのパートが何を意味するか、みてみましょう。

 

まず最初にデータ同期についてです。

データレプリケーションとは、2つまたはそれ以上のデータベースにデータをコピーし、それぞれがデータの最新コピーを持つことです。

データ同期とは、レプリケーションの中のある特定の形で、ハイレイテンシーまたは断続的なネットワーク越しにデータをレプリケーションするために作られたものです。これは、セッションベースです。それぞれのリモートデータベースが同期セッションをスタートすると、リモートのサイトで行われた変更を SAP HANA へアップロードし、HANA で行われた変更をリモートのサイトにダウンロードします。そこで、セッションが完了します。

多くの場合、リモートのデータベースは SAP HANA の全てのデータ、あるいは同じレイアウウトを必要することはありません。そのため、RDSync は、SAP HANA とリモートデータベース間でデータが移動する際にデータをサブセットし、変換する方法を提供します。

rdsync_overview.png

 

次に、SAP HANA についてです。

RDSyncは、SAP SQL Anywhere の Mobile Link (日本以外は MobiLink。日本は登録商標の関係で Mobile Linkを使用しています) と呼ばれる同期テクノロジーを使用しています。しかし、RDSync は、Mobile Link 同期サーバーがHANA プラットフォームに統合されているため、サーバーを管理しなければならない IT スタッフにとって多くのメリットがあります。

 

3番目に、「多くのリモートデータベース」についてです。

リモートのサイトにあるデータベースは、Windows、Linux、あるいはその他のOS 上で稼働するリッチなクライアント/サーバー型データベースである SAP SQL Anywhere データベースか、または、iOS や Android などのモバイルの OS のアプリケーションにビルトインできるコンパクトなデータベースライブラリーである SQL Anywhere の Ultra Light (日本以外は UltraLite。日本は登録商標の関係で Ultra Lightを使用しています)の両方が可能です。

 

すでに、SQL Anywhere の Mobile Link は、それぞれが何百ものテーブルを持つ、何千ものリモートデータベースとの利用実績があります。これらの複雑で、大規模な展開されたデータベースを処理するスケーラビリティー、パフォーマンス、そして正確性が、RDSync の役割のキーとなる部分です。

 

この説明から、 RDSync は、SAP HANA のデータプロビジョニングテクノロジー --- SAP HANA と他のアプリケーションやデータストアの間でデータを移動するソフトウェア --- に加わったものであることを理解していただけるでしょう。

 

下の図で、右側のテクノロジーは、SAP HANA と他のエンタープライズデータストア間のデータ移動テクノロジーです。右上から順に、他のリレーショナルデータベースとのリアルタイムのデータレプリケーション (SAP Replication Server)、複雑でハイパフォーマンスな抽出、変換、ロードのオペレーション(SAP Data Services)、そして Business Suite とのデータ交換テクノロジー(SAP Landscape Transformation)です。

 

左側のテクノロジーもまた、SAP HANA と外部のデータソースとデータ交換が可能です。こちらはパブリックのネットワーク越しに利用されることが多いものです。SAP Smart Data Streaming は、複数のソースからデータを高速で収集する方法を提供するもので、RDSync はリモートサイトに構造データの必要性がある場合に、より役にたちます。

rdsync_provision.png

 

 

What it is for - これは何のためのものか

 

私たちもよく聞くように、コンピューティングの世界のメインストリームは、中央に集中させたクラウドコンピューティングのアーキテクチャの方向に向かっています。クラウドでは、全てのデータは、インターネット越しにアクセスされます。

お分かりになるとおり、RDSync は、異なるパラダイム、つまりデータは中央だけではなくネットワークのエッジにも格納するというパラダイム向けに作られたものです。

クラウドがメインストリームである中、なぜこのようなテクノロジーを使用するのでしょうか?

 

RDSync には、このクラウドコンピューティングの時代でも、分散されたデータモデルが未だ役割を果たすことを示す共通の3つの利用例があります。

順番に説明しましょう。

 

1つめは、「サテライトサーバー」と呼んでいるものです。許容できる方法でエンタープライズシステムを利用することができない状況にも関わらず、行わなければならない業務があるリモートのワークプレースでの使用です。

2つめは、モバイルアプリケーションのカテゴリーの1つで、従業員の一日の業務全体に影響し、生産性のキーとなるモバイルアプリケーションでの使用です。

3つめは、おそらく現在最も重要視されている、モノのインターネット(Internet of Things : IoT)のアプリケーションのセットです。シンプルなデータ取得でも十分なものもありますが、IoTのアプリケーションでは、エッジにおいて大量の構造データ、そしてそのコンピューター処理が必要となります。

 

それぞれについてみてみましょう。

 

サテライトサーバーとしての利用例

 

サテライトサーバーとは、重要な業務プロセスが発生し、ネットワークに接続していない場合でも処理を行わなければならないリモートのワークプレースのサーバーのことです。極端な例をあげると、油田のプラットフォームがあります。 この最も隔離されたワークプレースにおいて SAP アプリケーションの機能を利用する方法として Transaction Availability for Remote Sites (TARS)と呼ばれる RCS (Repeatable Customer Solution) をSAPは提供しています。

油田プラットフォームは、技術的にはたいへん整ったワークプレースですが、油田プラットフォームとエンタープライズの基幹システム間のネットワーク接続は、satelite link (高レイテンシ) であるため、頻繁にネットワークが切断され、新しいサイトに移動する最中は特に切れやすくなります。しかしながら、作業員の共同作業であるメンテナンス作業は継続して行わなければなりません。実際、油田プラットフォームが移動している時に最も多く行われます(そのため実際のドリリング作業はあまり行われません)。

 

TARSのソリューションは、RDSync と Mobile Link のテクノロジー上で構築されています。そしてUI5 の Webアプリケーションを通して ローカルの SQL Anywhere サーバーを使用することで、SAP のトランザクションをいつでも実行できます。これは、SAP のビジネスプロセスを新しい領域に拡張するものです。

TARS のソリューションのその他の利用先としては、小売店舗 (店舗内にストアサーバーを置くことで店舗の業務が止まることがなくなります)、鉱業や林業、運輸交通業界などでの利用が考えらえます。

 

モビリティでの利用例

 

リモートのサイトとは、職場全体ではなく、タブレット端末や、スマートフォン、ノートPCの場合もあります。多くのモバイルアプリケーションは、端末上にデータベースは必要ありません。そしてデータ同期のアーキテクチャーが必要なケースは、さらに少ないでしょう。しかしながら、従業員の一日をドライブするキーとなるアプリケーションには、データベースが必要になります。例えば、鉄道の検査のアプリケーション(資産管理)や、一般消費者向け商材の DSD サービス (direct store delivery service) 、あるいは小売業の在庫管理アプリケーションや、業界特化型の CRM アプリケーションなどです。

 

モノのインターネット(Internet of Things : IoT)利用例

 

サテライトサーバーやモビリティーの利用例のように、全ての IoT ソリューションで RDSync が必要になるわけではありません。しかしながら、必要になるアプリケーションが存在します。SQL Anywhere は、「IoT ゲートウェイ」上でも稼働します。つまり、Raspberry Pi やその他産業用に設計された安価なシングルボードコンピューターが搭載されたボックスなどです。これは、ローパワーの無線や Bluetooth のネットワーク越しにセンサーからのデータを収集し、HANA での分析にリレーすることができます。IoT アプリケーションのセットによっては、IoT ゲートウェイで重要なコンピューター処理を実行し、構造データが利用できるようにすることで、データ同期のソリューションが意味を持ってきます。最近携わった事例では、IoT ゲートウェイ上で、テーブル数が 50もあるデータベースを稼働させました。データ収集は、ほとんど全て単一のテーブルに対して行われましたが、価値のあるメタデータが他のテーブルで提供され、IoT ゲートウェイ上でスマートなアプリケーションの稼働を可能にしました。

 

 

ここで、共通のスレッドがあります。

コンピューティングの展開・配備のメインストリームは、クラウドベースかもしれません。しかしながら、ネットワークのエッジにおいても信頼性が高く可用性の高いデータが利用可能であることによって、企業の新たな領域へのビジネスプロセスの拡張に役立つ、この価値あるニッチ市場を無視することはできません。

 

 

How it works - これはどう機能するのか

 

このブログは、ソリューションの構築方法を説明する詳細製品マニュアルのページではありません (詳細については http://help.sap.com/hana_options_replicationを参照してください)。しかしながら、データ同期がどのように機能するのか、ここで簡単に説明しておきたいと思います。

 

それぞれの SQL Anywhere リモートデータベースには、ビルドインのデータ同期クライアントがあり、リモートデータベースに対して行われた変更をピックアップすることができます。そして、パブリックのネットワーク経由で RDSync サーバーとコミュニケーションをとります。同期クライアントは、定期的にセッションを開始します。同期クライアントは、その後、変更をアップロードし、Acknowledge を受け取り、再デリバリーされることがないようにします。そして、SAP HANA からの変更を集めまとめます。このプロトコルは、プロプラエタリで、TCP/IP や HTTP プロトコル越しで機能する高速なコミュニケーションメカニズムです。また、ネットワークセキュリティオプションのメリットをフルに享受することができます。

同期サーバーは、それ自体には重要なデータストレージを持っていません。アプリケーションの全てのメタデータは、SAP HANA 内の特別なスキーマに格納されます。

 

このサーバーは、イベントベースのモデルを実装しています。それぞれの同期リクエストは、複数のイベントに対して発火され(例えば、それぞれのテーブルのアップロードデータを扱うイベントなど)、同期サーバーは、それぞれのイベントに対して「同期スクリプト」と呼ばれるものを実行します。これらのスクリプトを提供するかどうかは開発者に依存します。

同期スクリプトは、HANA SQL Script で書かれることもあり、また単一のSQL 文のように小さいこともあります(例えば、“upload_insert”のイベントでは、スクリプトは、単一のINSERT 文かもしれません)。

また、同期スクリプトは、それぞれのリモートデータベースが異なるデータセットをもつ可能性があるため、同期クライアントからくるビルトインのパラメーターのメリットを享受することができます。

60 を超える異なるイベントのフレームワークによって、大規模なカスタマイズも可能なため、RDSync は、要求事項の多いアプリケーションを扱うことも可能です。単一のサーバーで、一つのアプリケーションの複数のバージョン、さらには複数のアプリケーションも扱うことができます。

成熟したテクノロジーをベースに構築されているため、RDSync は先進の機能セットが提供されています。トランザクションインテグリティを保証するとともに、実績により証明されたパフォーマンスとスケーラビリティーを実現する設計になっています。さらに、ネットワークごしのコミュニケーションとリモートサイト上のデータに対してend-to-end の暗号化を実行できます。包括的なロギングとエラーハンドリングオプションがあり、幅広いエンタープライズ認証システムと統合することも可能です。

(この最初のリリースでは、開発期間への支援は制限されており、最も使いやすいテクノロジーにはなっていません。RDSync が提供する強力な能力を最大限発揮するには、投資と学習の時間が必要です。)

 

 

SAP HANA integration - SAP HANA との統合

 

RDSync で新しいのは、HANA プラットフォームへの同期テクノロジーの統合という点です。自身で管理しなければならない別のサーバーとしてではなく、RDSync は、HANA の機能の中に統合されています。

  • インストールからシステムの名前の変更やアップグレード、あるいは一つのホストから別のホストへの移行などのライフサイクル管理は全て、SAP HANA ライフサイクル管理ツールを利用して実行できます。
  • SAP HANA ネームサーバーユーティリティーは、設定のシングルポイントとして機能し、自動スタートサービスやRDSync を実行しているホストが利用できなくなった場合の高可用性も提供します。
  • HANA Cockpit と HANA Studio への統合により、HANA ランドスケープを管理する幅広いピクチャーの一部として、システム設定やモニタリングを確実に実行することが可能です。
  • オペレーション上の使いやすさを目的として、ポートの割り当て、モニタリング機能、ライセンス契約、そしてメタデータスキーマなど、全てがインストール時に、システマティックに、信頼できる形で、SAP のプラクティスにフィットする方法で作成されます。

 

まとめると、SPS10、SAP HANA remote data sync は、最初のリリースです。しかしながら、コアとなる機能は、成熟しており、証明されたものです。SAP のお客様は、HANA プラットフォームとの統合により、オペレーション上の一貫性において新しいレベルを享受することができます。

 

 

How to buy it - どうやって買うのか

 

SAP HANA remote data sync は、SAP HANA リアルタイムレプリケーションバンドルの中の一部です。これには、SAP Replication Server や SAP Landscape Transformation も含まれています。

RDSync を使用するお客様は、リモートのサイトで使用する SAP SQL Anywhere については、別途ライセンスを購入する必要があります。通常、SAP SQL Anywhere remote database client という形のライセンスが必要です。

ソフトウェアについては、他のSAP ソフトウェアと同様に SAP Service Marketplace から入手することができます。SAP Software Download センターの、H の文字の下にある HANA をご確認ください。

 

サポートの問題は、アプリケーションコンポーネントヒエラルキーコード HAN-SYNでお問い合わせください。コンポーネントのモニタリングについては HAN-CPT-SYN で問い合わせてください。

 

詳細については、http://help.sap.com/hana_options_rdsyncに掲載されているマニュアルを参照してください。

SQL Anywhere のマニュアルについては、http://dcx.sap.comを参照してください(日本語マニュアルもあります)。

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

SQL Anywhere 17のリリースが発表されました !

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2015/07/15/announcing-sql-anywhere-17

 

 

 

SQL Anywhere 17 のリリースが発表されました!

 

私はSQL Anywhere の革新的な新バージョンのリリースがアナウンスされ、エキサイト しています!

このリリースにおける強化点は、われわれがこれまでずっと継承してきたテーマである、パフォーマンス、セキュリティ、可用性、開発フレンドリー性の向上、そして、同時に使いやすいこと、埋め込みやすいこと、です。

 

SQL Anywhere 17 は、過去 2 年間の開発の結晶です。何百もの新機能がありますが、いくつか重要なものを以下に挙げたいと思います。

 

 

ツール

 

  • SQL Anywhere Cockpit ––– サーバの可用性、キャパシティ、パフォーマンスを監視するための Web ベースのインタフェースです。
  • SQL Anywhere プロファイラ ––– サーバーにある様々なパフォーマンスやチューニングのデータをまとめ、アプリケーションやデータベースのチューニングやトラブルシューティングをより容易に行うための開発ツールです。

 

 

パフォーマンス

 

  • CPU 変更の自動検出 ––- システムに動的に新しく追加 (あるいは取り除かれた)CPU を検出し、サーバを再起動しなくともそれらのCPUを適切に使用できるようになりました。
  • ミラーリングパフォーマンス ––– 特にプライマリサーバへの大量の挿入、更新、削除の際に、ミラーまたはコピーノードのチェックポイントパフォーマンスが向上しました。
  • インタフェース -–– ODBC、.NET、JDBC、Ruby、PHP、OLEDB、JavaScript、NodeJS、Perl など、SQL Anywhere の様々なインタフェース全てを分析し、パフォーマンス向上に取り組んだ結果、データのフェッチやインサートがさらに高速になりました。
  • パラレルリカバリ -–– データベースリカバリのフェーズにおいて、マルチコアマシンをより効果的に使用できるようになりました。
  • プリフェッチ ––– プリフェッチの速度が向上しました。クライアント/サーバのラウンドトリップの削減やサーバー上で処理に必要なローが異なるリクエストに対しても多くのローが使用できるようになったことにより、スループットが向上し、全体のパフォーマンスが向上しました。

 

 

セキュリティ

 

  • パスワードプロテクションの強化 ––– dbinit と CREATE DATABASE 文ではデフォルトの DBA ユーザ名とパスワード (DBA/sql) は使用しないこととし、デフォルトのパスワードの最少文字数を、3 から 6 に変更しました。新しいデータベースを作成する場合には、DBA ユーザ名とパスワードが必要になります。さらに、ユーザがパスワードの最少文字数を特定することができるオプションを追加しました。
  • データベースの独立性 ––- データベースサーバのためのデータベースの独立性のサポートを追加しました。1つのSQL Anywhere サーバーで複数のデータベースが稼働する環境において、新規に追加されたデータベースの独立性機能を有効にした場合には、それぞれのデータベースが、そのデータベースサーバ上で唯一のデータベースであるような動作をするようになります。

 

 

可用性

 

  • Alter/drop プロシージャ ––- 以前のバージョンでは、実行中のプロシージャに対して、alter, replace, drop を試みてもエラーになりましたが、alter, replace, drop が成功するようになりました。現在は、そのプロシージャが実行を開始した時のプロシージャの定義を使用します。新しいバージョンでは、alter、 replace、またはdropが、新しい定義のプロシージャをコールするようにしました。
  • オンライン中のDB再構成 ––- 本番データベースをデータベースが稼働している最中であってもデータベースの再構成が可能になり、ダウンタイムを減らせるようになりました。
  • Point-in-time リカバリ ––– 特定のタイムスタンプ、またはトランザクションログのオフセットにデータベースをリストアできるようになりました。
  • TCP-IP/HTTP の動的開始/停止 -–– データベースサーバが起動中の接続リスナのスタートとストップをサポートします (データベースのアップグレードまたは再構築が必要)。--- つまり、HTTP、HTTPS、TCP/IP、シェアードメモリ接続リスナをデータベースサーバーの再起動なしに開始・停止できるようになりました。

 

 

新規サポートのSQL機能

 

  • PIVOT/UNPIVOT -–– pivoted-  または unpivoted-derived テーブルを作成する際、クエリの FROM 句の中で、PIVOT と UNPIVOT の 2 つの句を使用してテーブルデータを pivot 、unpivot することができるようになりました。Pivot すると、カラムデーターはローに入れ替えられ、データをビジネスのニーズにとって意味のある方法で集計できます。Unpivot は、同様のオペレーションですが、ローデータをカラムに入れ替えます。Unpivot は、正規化されていないデータを正規化するのに役にたちます (例えば、他のデータとjoin されていなければならない同様のデータのカラムのいくつかなど)。
  • DECLARE VARIABLE LIKE ––– 他のオブジェクトのデータタイプをベースにし、%TYPE と %ROWTYPE 属性を使用してデータタイプを定義することができるようになりました。カラムのようなスキーマオブジェクトを作成する際には、テーブルまたはビュー内のカラムのデータタイプに対して %TYPE 属性を使用して作成またはalteringしているオブジェクトのデータタイプを設定します。テーブルまたはビュー内のローの複合データタイプに対してデータタイプを設定する場合には、%ROWTYPE 属性を使用して、データタイプを設定します。変数を作成する場合には、%TYPE と %ROWTYPE 属性を使用して、変数やカーソルのようなテンポラリーオブジェクトのデータタイプに対してデータタイプを設定することができます。
  • FETCH INTO <row var> ––- SELECT 文に、INTO VARIABLE 句が含まれ、新しいテーブルの明示的な作成をサポートするために、ロー変数と INTO TABLE 句の特定をサポートしました。
  • ユーザーロック ––- ユーザー定義のミューテックスやセマフォをアプリケーションロックの中に構築できるようになりました。これによりリソースの可用性に関してコミュニケーション、制御、そして、ロッキングの動作ができるようになりました。

 

 

開発者向け強化点

 

  • OData の強化 -–– SQL Anywhere データベースサーバ自体が OData サーバとして機能するようになりました。今後は、この機能がこれまでのOData サーバユーティリティにかわることになります。さらに、OData プロデューサは、OData Service Definition Language (OSDL) の幅広いサブセットをサポートします。
  • Javascript 外部環境 ––- SQL Anywhere において、JavaScript ストアドプロシージャと関数をサポートします。
  • Node.JS と Python ドライバ -–– SQL Anywhere Node.js ドライバによって、Joyent の Node.js ソフトウェアプラットフォーム上で JavaScript を使用して、データベースに接続し、データベース上でクエリを実行することができるようになりました。さらに、Python のオフィシャルパッケージインデックスである PyPI をとおして3つの SQL Anywhere Python ドライバが利用可能になりました。
  • 統合 DB ––– Mobile Link は、SAP (ASE, IQ, SQL Anywhere)、Oracle、Microsoft、IBM、MySQL のバックエンドデータベースをサポートしていますが、version 17 では、さらにOracle 12.1、ASE 16、SS 2014、MySQL 5.6.20、IBM DB2 10.5 をサポートしました。
  • HANA との統合 ––– SAP HANA Remote Data Sync 製品によって、Mobile Link はHANA プラットフォームのインフラストラクチャへより強固に統合されました。(ポート番号の割り当て、ライフサイクルマネジメント、ネームサーバの統合、ライセンス管理、モニタリングの統合など)
  • SAP Passport のサポートと NCSLib ロギング に対応しました。

 

 

SQL Anywhere version 17 の強化点の詳細については、オンラインマニュアルを参照してください。我々のオンラインマニュアルのシステム、Doc Comment Exchange (DCX) はこちらです DocCommentXchange

同様に、このドキュメントに関して Laura が書いたナビゲーションもご参照ください(英語)。 SQL Anywhere 17 Documentation - At your fingertips!

 

(注:version 17 の日本語マニュアルは現在翻訳中です。version 16 までの日本語マニュアルは、同じ Doc Comment Xchange に掲載されています。翻訳が完了し次第、Doc Comment Xchange に掲載される予定です。)

 

SQL Anywhere 17 の Windows 版、および Linux 版はこちらからダウンロードできます。 https://www.sap.com/cmp/syb/crm-xm15-dwn-dt015/index.html

 

 

SAP SQL Anywhere チームより、お客様の SQL Anywhere 製品へのご愛顧を感謝いたします !

 

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

SQL Anywhere 17 - Autocommit の強化

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2015/07/21/sql-anywhere-17--autocommit-enhancements

 

 

最近リリースされた SQL Anywhere 17 には、様々な側面からのパフォーマンスの強化、データベースサーバーやクライアントのセキュリティや堅牢性強化のための幅広い新機能、そして開発生産性向上のための新たなツールが含まれています。バージョン17の概要については こちらをご参照ください。

 

これから、version 17の変更のメリットをお客様に活用していただくため、いくつかの機能をピックアップして、以前のバージョンと詳細に比較分析した結果について掲載していきたいと思います。

新しいバージョンにおける変更点や改善点にハイライトをあてつつ、それについて可能であればベストプラクティスを提供するつもりです。

 

最初に選択したトピックは、autocommit です。

 

Auto-commit は、トランザクションで commit が発行された場合に適用されるデータベースクライアント接続オプションです。SQL Anywhere におけるベストプラクティスとしては、auto-commit は可能であればどこも無効にすることをお奨めします。なぜならば、commit のオペレーションには、IOが発生するからです。

IO は、一般的な RDBMS において最も expensive なものです。一般的には、auto-commit を使わない方が、commit の数は少なくなり、データベースサーバーのパフォーマンスは、より高速になります。さらに、ビジネスプロセスと同調するトランザクションを作成・管理することで、commit が発生した時もコントロールしやすく、ビジネスルールとも連動する、より一貫性のあるデータベースにすることができます。

 

auto-commit を使用しない方が望ましいにもかかわらず、多くのアプリケーションは実際 auto-commit を有効にして構築されています。これには理由がいくつかあります。オペレーションごとに commit する方が簡単であることが多かったり、データベースの変更が成功しているかどうかすぐにフィードバックを得られる方が開発者にとっては魅力的だからです。さらに、多くのデータベースインターフェースでは、デフォルトでは auto-commit が有効になっているため、アプリケーション開発者はデフォルトでは auto-commit のアプリケーションを開発しています。

しかしながら、アプリケーションが一旦構築されてしまうと、明示的な commit を行うようにアプリケーションを再構築するのは非常に困難であることがよくあります。

 

version 17 より前のバージョンの SQL Anywhere では、アプリケーションで auto-commit がONになっている場合、クライアントのAPI (例えば ODBC, JDBC, etc…) は、データベースのリクエストごとに、明示的な “COMMIT” を発行していました。

version 17 では、このサーバーとの余計なコミュニケーションを避け、全体パフォーマンスを改善するために (驚くなかれ!) auto_commit という新しいオプションが追加されました。

このオプションは、デフォルトでは OFF になっており、接続が継続している間のみローカルで設定できます (つまり、PUBLIC auto_commit オプションは設定できません)。アプリケーションが auto_commit オプションを ON に設定した場合には、SQL Anywhere サーバーが、リクエストごとに、自動的に commit します。

 

また、この新しいオプションのメリットを自動的に享受できるよう、全ての SQL Anywhere クライアントインターフェースを更新しました。

version 17 の SQL Anywhere ODBC、 JDBC、OLEDB ドライバーは、version 17 サーバーに接続した場合、アプリケーションが相応する AutoCommit API コールをそれぞれのドライバーに対して発行した時に、自動的に新しい auto_commit オプションを設定します。

ターゲットサーバーが version 16 以前のものの場合には、これらのドライバーは、クライアントサイドに auto commit をハンドリングするよう戻します。

(例えばESQL のような) 以前は autocommit がサポートされていなかった API でも、これらのアプリケーションで新しい auto_commit オプションを使用して、必要であればそれぞれの実行ごとにサーバーに自動的に commit させることができます。

 

 

パフォーマンス

 

以下の例は、リクエストごとにサーバーが auto commit することを示しています。

SET TEMPORARY OPTION auto_commit = ‘ON’

 

このオプションのパフォーマンスへのインパクトをみるために、SQL Anywhere に同梱されている PerformanceInsert サンプルを使用して単純なテストを実行してみました。私のノートPCで、単一の integer primary key のテーブルを使用し、100000行挿入してました。

CREATE TABLE ins( c1 integer NOT NULL PRIMARY KEY );

 

最初に、1 commit  (テストの最後に) でテストしてみました。:

instest -cdba,sql -o ins.out -r 100000 -x -v 1

 

2番目のテストでは、ローごとに commit しました。

instest -cdba,sql -o ins.out -r 100000 -x -v 1 -m 1

 

3番目のテストでは、ソースコードを instest に変更し、データベース接続後に auto_commit を ON にするコマンドを追加しました。

EXEC SQL EXECUTE IMMEDIATE 'SET TEMPORARY OPTION auto_commit=ON';

 

…そして、明示的な commit なしにテストを実行しました。

instest -cdba,sql -o ins.out -r 100000 -x -v 1

 

結果は以下のとおりです。

 

ローカルマシン接続

挿入時間 (s)

commit 時間 (s)

時間総計 (s)

1 commit

9.669

0.18

9.849

クライアントからローごとにcommit

11.185

22.91134.096

ローごとにauto_commit=’ON’

で commit

*

*

30.029

 

ご覧のとおり、オペレーションごとに commit しないことで、パフォーマンスには大きなインパクトがあります。

しかしながら、アプリケーションが、同じマシンの接続ごしに、auto_commit を使用する場合、このテストでは、クライアントにオペレーションごとに commit を発行させるのと、サーバーにオペレーションごとに自動的に commit させるのとでは、パフォーマンスにおいて ~13% の違いを示しました。

ネットワークサーバーと TCPIP を使用する場合、この違いはさらに明白で、パフォーマンスにおいて、~17% の違いを示しました。 (下の表参照)

 

TCP/IP 接続

挿入時間 (s)

commit 時間 (s)

時間総計 (s)

1 commit

13.486

0.24613.732

クライアントからローごとにcommit

14.615

26.46741.082

ローごとに auto_commit=’ON’

で commit

*

*

35.222

*サーバーが commmit のオペレーションを実行しているので、intest プログラムは commit とインサートの実行時間を分けることができません。

ラボで行った他のシナリオのテストでは(より多くの負荷アクティビティをミックス)、クライアントベースの auto_commit オペレーションに対して、サーバーサイドの auto_commit オペレーションが使用されている場合、commit オペレーションのパフォーマンスにおいて 25-30% もの改善を示しました。

 

 

最後に - Chained vs. Autocommit

 

auto_commit オプションは、データベースの chained オプションとは大きく異なります。

chained=OFF に設定すると、サーバーに対して、1つのプロシージャー内の個々のステート文を含め、それぞれのステートメント文がサーバーで実行された後に、commitするよう強制します。

それに対して、auto_commit を ON に設定すると、サーバーはクライアントからのそれぞれのステートメント文の実行ごとにのみ commitするよう強制されます。プロシージャーの場合には、 auto_commit が ON の場合、全てのプロシージャーが実行完了した後に、commit が行われます。

 

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

SQL Anywhere 17 - データベース独立性の強化

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2015/08/13/sql-anywhere-17--database-isolation

 

デフォルトでは、データベースサーバーを起動すれば、実際に使う使わないにかかわらず、全ての機能にアクセスすることが可能です。

これらの機能の中には、 あなたが思いもよらないことをするために(悪意があるないにかかわらず)第3者がアプリケーションの一部として使用することが可能なものもあります。

 

例えば、ある第 3者は、データベースサーバーがファイルシステムにアクセスし、e-mail を送信し、web サービスを呼び出すということを利用して、マシンのセキュリティを脅かすことをするかもしれません。

 

アプリケーションの中でこれらの機能を使っている認識があれば、このような使われ方をする可能性に事前に気づき、問題を軽減するための適切に対処することができます。しかし、これらの機能をアプリケーションの中で使っていない場合には、問題が発生するまで気がつかないかもしれません。

 

バージョン 10 では、本番環境に配備された SQL Anywhere サーバーを第3者が誤って使用しないよう、アプリケーションを展開する際にデフォルトで利用できるサーバーの機能を開発者が制御できる機能をSQL Anywhereに追加しました。

これは、データベースサーバーの特定の機能を有効、無効にできる機能で、「Secure Feature」 機能と呼んでいます。例えば、xp_start/stop/sendmail プロシージャーを使わないのであれば、サーバーを実行する際にこの機能を無効にすることができます。

 

「Secure features」は、コマンドスイッチ (-sf <features>) で有効化します。特定の機能をランタイムで有効化/無効化するには、キー (-sk <key>) を使います。多くの機能を制御することが可能ですが、詳細についてはこちらを参照してください。

 


以下では、Secure Feature の機能を理解するために、新たに SQL Anywhere 17 で追加された新しい「secure feature」、データベースの独立性について説明します。

これが有効になっていると、1つのデータベースサーバー上で稼働しているそれぞれのデータベースは、そのデータベースサーバー上で稼働する唯一のデータベースであるかのように動作します。

同じサーバー上で稼働している他のデータベースのためにプロパティや接続情報をクエリする目的で、ある1つのデータベースへ接続することはできないようになっています。他のデータベースの起動・停止もできません。

 

新しいサーバーコマンドラインオプション -edi (enable database isolation) を使うと、データベースの独立性を有効にすることができます。また、secure feature database_isolation の機能を使うと、ある特定の接続に対して、アプリケーション側でデータベース独立性を無効にすることもできます。

これらの新しい 「secure feature」は、デフォルトでは有効になっており、グローバルに適用されるのではなく、特定のデータベースでのみ無効にすることができます。

 

具体的に説明するために、2つのデータベースを作成してみました。demo.db と demoprime.db です。これらのデータベースが稼働している状態でサーバーを起動すると、下のようになります。

 

  1. dbsrv17 -n J -edi demo.db demoprime.db 

その後、dbisql からこれに接続し、“SELECT * FROM sa_db_info()” 文を実行すると、この同じサーバー上で稼働するどちらのデータベースも「見る」ことができることがわかります。

databaseisolation_disabled.JPG

 

ユーザーは、ある1つのサーバー上でどのデータベースが稼働しているのかわかるので、稼働中の他のデータベース(データベースと接続プロパティーと、例えばデータベースファイルの情報)に関する情報を見ることができてしまいます。これを防ぐために、独立性を有効にした状態でデータベースサーバーを実行することができます。

 

  1. dbsrv17 -n J -edi demo.db demoprime.db 

dbisql からデモデータベースへ接続し、同じ “SELECT * FROM sa_db_info()” 文を発行しても、接続したデータベースに関することしかわかりません。

 

databaseisolation_enabled.JPG

 

sa_conn_info(), sa_db_properties(), etc…などの他のシステムプロシージャーでも結果は同様になります。 like sa_conn_info(), sa_db_properties(), etc… 接続されたユーザーが、同じデータベース上で稼働する他のデータベースの情報を「見る」方法はありません。

 

では、管理者に、この情報へのアクセスを許可したい場合はどうすればよいでしょうか?現在稼働しているサーバーの方法では、異なるオプションでそのサーバーを再起動しなければ、データベース独立性を無効にする方法はありません。

 

ある1接続のデータベース独立性機能の無効化を許可するには、sf/sk オプションを使用してキーを設定します。このキーを使えば、起動中のサーバー上であっても「secure features」を修正することができます。

 

  1. dbsrv17 -n J -edi -sf none -sk mysfkey demo.db demoprime.db 

 

サーバーが稼働中で、データベース独立性が有効な場合には、同じサーバー上で稼働している他のどのデータベースの情報へもアクセスすることはできません。ある1接続のデータベース独立性を無効にするには、以下のプロシージャーコールを実行して、「secure feature」アクセスのキーを管理できるようにするとことで可能になります。

 

  1. CALL sp_use_secure_feature_key( 'system', 'mysfkey' ); 

 

database_isolation 機能と連携するキーを作成します。

 

  1. CALL sp_create_secure_feature_key( 'dbiso', 'dbisokey', 'database_isolation' ); 

 

これでキーを管理下のユーザーに配布することが可能です。ユーザーはこれを使用して自分の接続の database_isolation の機能を無効にすることができます。

 

  1. CALL sp_use_secure_feature_key( 'dbiso', 'dbisokey' ); 

 

この接続のデータベース独立性を再有効化するには、別のキーを作成します。

 

  1. CALL sp_use_secure_feature_key( 'system', 'mysfkey' ); 
  2. CALL sp_create_secure_feature_key( 'disabledbiso', 'dbisokey', '-database_isolation' ); 
  3. CALL sp_use_secure_feature_key( 'disabledbiso', 'dbisokey' ); 

 

備考:データベース独立性が有効であっても、適切なユーティリティーのユーザーID とパスワードを使えば、アプリケーションはユーティリティデータベースに接続し、ユーティリティーアクションを実行することが可能です。しかしながら、ユーティリティーデータベースに接続された状態でのデータベースの起動・停止は制限されているため、データベースの起動・停止には、アプリケーション側で manage_database_isolation の secure feature を使用する必要があります。

 

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

SQL Anywhere 17 - グッバイ DBA/SQL

$
0
0

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

http://scn.sap.com/community/sql-anywhere/blog/2015/08/18/sql-anywhere-17--good-bye-dbasql

 

 

SQL Anywhere では、SQL Anywhere が誕生した一番最初のバージョンより、新規に作成されるデータベースのデフォルトのユーザーID とパスワードは DBA/sql でした。

 

ユーザーID:DBA とデフォルトのパスワードを本番データベースでは使用しないことがベストプラクティスとして考えられていましたが、デフォルト接続で DBA を使用したアプリケーションをリリースされているお客様もいらっしゃることがありました。幸い、デフォルトのパスワードを本番データベースに使用されているお客様はほとんどいらっしゃいませんでした。

 

DBA 以外のユーザーID の使用を促進するため、dbinit ユーティリティーと CREATE DATABASE 文では、デフォルトは使用しないことにしました。新しいデータベースを作成する際は、ユーザーID とパスワードを特定する必要があります。今後は、dbinit では “-dba <userid>,<password>” オプションを指定して、新しいデータベースを作成する必要があります。CREATE DATABASE 文では、“DBA USER <userid>” と “DBA PASSWORD <password>”句を使用する必要があります。

 

さらに、デフォルトのパスワードの最少文字数を、3 から 6 に変更しました。これよりも少なくしたり、増やしたり、コントロールすることも可能です。dbinit コマンドラインオプション “–mpl” と CREATE DATABASE 句 “MINIMUM PASSWORD LENGTH” を使うと、新しいデータベースのパスワードの最少文字数を指定することが可能です。また、データベースを作成した後でも、min_password_length のデータベースオプションを変更することで、パスワードの最少文字数を変更することが可能です。utility_db データベースのパスワードは、6 文字である必要があることに注意してください。

 

データベースを再構築する際に reload.sql でデフォルトのユーザー ID とパスワードを 使用できないので、dbunload も少し変更されました。16 byte のランダムに生成される値が使用されるようになりました。

 

ユーティリティーデータベースでは、唯一のユーザー名である、DBA は必要なくなりました。-su サーバーオプションは、"-su <password>" から "-su <userid>,<password>" または "-su <password>" または "-su none" に変更になりました。パーソナルサーバーは、-su サーバーオプションが指定されていない場合には、デフォルトでは今後も user DBA とどのパスワードでも utility_db への接続が可能です。

 

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

Viewing all 49 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>