0

NetScaler 9 (v10) で導入された新しい DataStream 機能を使用して、コンテンツの切り替えを行います ( http://support.citrix.com/proddocs/topic/netscaler/ns-dbproxy-wrapper-con. html )。いくつかの読み取り専用 MySql スレーブ間でバランスをとる読み取り専用仮想サーバーがあります。コンテンツ スイッチングを使用して、すべての「選択」を読み取り専用サーバーに送信します。

ポリシーは次のように構成されます。

mysql.req.query.command.contains("select")

ユーザーはマルチパート クエリをデータベース サーバーに送信します。ほとんどの場合、次のように単純です。

use database;
select col1 from table1;

クエリの先頭にコメントを入れることもあります。例えば:

-- this is my query
select col1 from table1;

私たちが見つけたのは、クエリが選択で始まるだけの場合、すべてがスムーズに機能することです。ただし、クエリの前に use ステートメントまたはコメントがある場合、コンテンツ スイッチャーはこれが選択クエリであることを検出できず、読み取り専用の仮想サーバーをバイパスします。

私はすべての開発者に、すべてのクエリですべてのテーブルを完全にエイリアスし、use ステートメントを避ける必要があること (はい、これはとにかく良いことです)、また SQL でコメントを使用できないこと (それはばかげています) を伝えようとしています。

コメントを無視してステートメントを使用するようにNetScaler DataStreamコンテンツスイッチングを構成する方法を知っている人はいますか?

4

3 に答える 3

2

クエリの送信先の決定は、認証が成功した後に受信した最初の行で行われます...そのため、コメントを無視しても機能しません。「負荷分散された VIP に送信されるコマンドで SQL コメントを使用しないでください」というエラー メッセージを返すレスポンダー ポリシーをセットアップできます。少し厳しいですが、開発者はメッセージをかなり迅速に受け取ります..しかし、コメントを無視する方法はありませんが、select ステートメントに基づいて決定を下します。ただし、selectステートメントは最初のセミコロンまでであるという印象を受けました...したがって、上記の例では、(理論的には)まだselectステートメントが見つかるはずです。ただし、動作を確認するには、それをテストする必要があります。

また、USE ステートメントも重要です。これは、後続のすべてのコマンドが発行される DB です。USE ステートメントを使用しないことをお勧めしますが、select ステートメントを次のように変更します。

USE ステートメントが表示されると、後続のコマンドが同じ接続にパイプライン処理されるのを防ぎます... したがって、多数の Use ステートメントがある場合、DataStream に付属する接続の多重化機能を享受できません。

于 2014-09-29T22:43:31.890 に答える
0

ブロック レベルのコメントは許容されますが、1 行のコメントは許容されないことがわかりました。

これは適切に無視されます:

/* my comment */

これらのコメント スタイルは、クエリの一部として扱われます。

-- my comment
# my comment
于 2014-10-02T15:41:50.890 に答える