目的
データベース・サーバー・プロセスに関連した Ubik プロセスの状況を報告します。
構文
udebug -servers <server machine> [-port <IP port>] [-long] [-help] udebug -s <server machine> [-p <IP port>] [-l] [-h]
構文
udebug コマンドは、 -servers 引き数で指定されたデータベース・サーバー・マシンで実行中の、 -port 引き数で識別されるデータベース・サーバー・プロセスのライト・ウェイト Ubik プロセスの状況を表示します。出力では、ピア・データベース・サーバー・プロセスが実行しているマシンのうち、同期サイト (Ubik コーディネーター) となるもの、および、それらの間の接続状況が識別されます。
オプション
buserver または 7021 (バックアップ・サーバーの場合)
kaserver または 7004 (認証サーバーの場合)
ptserver または 7002 (保護サーバーの場合)
vlserver または 7003 (ボリューム・ロケーション・サーバーの場合)
出力
出力のメッセージには、 -servers 引き数で指定されたマシンでの Ubik プロセスに関する基本状況情報を提示しているものもあり、他には、主にデバッグ目的の場合に有用なものもあります。
基本 Ubik 状況を検査するには、データベース・サーバー・マシンごとにコマンドを順に発行します。それぞれの出力ごとに、以下のメッセージのいずれかが、出力の上部 3 分の 1 に表示されます。
I am sync site . . . (#_sites servers) I am not sync site
同期サイトの場合、次のメッセージは、すべてのサイトのデータベースのバージョンが同じであることを示しています。これは、Ubik が正しく機能しているという意味です。 1f 以外の値の記述については、次を参照してください。
Recovery state 1f
Ubik 操作が正しく実行されるためには、データベース・サーバー・マシンのクロックの時刻が合っていなければなりません。出力の 2 行目および 3 行目にある以下のメッセージは、データベース・サーバー・マシンのクロック、および udebug コマンドが発行されるマシンのクロックに従って、現在の日付および時刻を報告します。
Host's IP_addr time is dbserver_date/time Local time is local_date/time (time differential skew secs)
skew は、データベース・サーバー・マシンのクロックとローカル・クロックの差です。差の絶対値は Ubik 機能に対して致命的なものではありませんが、データベース・サーバー・マシンの skew 値の間に 2 、3 秒以上の差があれば、クロックが同期していないことになり、 Ubik パフォーマンスが妨げられる可能性があります。
出力のすべてのメッセージについて、以下に説明します。記述のように、デバッグの場合、非常に有用であるし、 Ubik のインプリメンテーションについて理解しているユーザーには非常に分かりやすくなっています。
出力は、以下のメッセージで始まります。 1 番目のメッセージは、 -servers 引き数で指定されたマシンのオペレーティング・システムで構成されている IP アドレスを報告します。前述のように、 2 番目と 3 番目のメッセージは、データベース・サーバー・マシンと udebug コマンドが発行されるマシンのそれぞれのクロックに従って、現在の日付および時刻を報告します。出力内の後続のタイム・スタンプはすべて、データベース・サーバー・マシン・クロックではなく、ローカル・クロックで表されます。
Host's addresses are: list_of_IP_addrs Host's IP_addr time is dbserver_date/time Local time is local_date/time (time differential skew secs)
skew が約 10 秒を超える場合、次のメッセージが表示されます。記述のように、これは、必ずしも Ubik の誤動作を意味する訳ではありません。データベース・サーバー・マシン間ではなく、データベース・サーバー・マシンとローカル・マシンの間のクロック・スキューを示します。
****clock may be bad
コーディネーター選出プロセス中に、udebug コマンドが発行され、投票がまだ開始されていない場合は、次のメッセージが表示されます。
Last yes vote not cast yet
そうでない場合、出力は、以下のメッセージで始まります。
Last yes vote for sync_IP_addr was last_vote secs ago (sync site); Last vote started vote_start secs ago (at date/time) Local db version is db_version
最初のメッセージは、この Ubik プロセスがコーディネーターとして最後に投票した、ピア (自分で自分自身を選出できる) および、どのくらい前に投票したのかを示しています。 2 番目のメッセージは、Ubik コーディネーターが、どのくらい前にセカンダリー・サイトからの投票の確認を要求したのかを示しています。通常、last_vote 値および vote_start 値は同じで、これらの値の差異は、 2 つのデータベース・サーバー・マシン間のクロック・スキューまたはスロー・ネットワーク接続を示している可能性があります。小さな差異は、問題ありません。 3 番目のメッセージは、この Ubik プロセスで保守されるデータベースの現行バージョン番号 db_version を報告します。この番号は、ピリオドで 2 つのフィールドに分かれています。ピリオドより前のフィールドは、最新のコーディネーター選出後、初めてデータベースが変更されたときに反映されるタイム・スタンプに基づくもので、ピリオドより後のフィールドは、選出以降変更された回数を示しています。
出力には、Ubik プロセスがコーディネーターであるか否かによって異なるメッセージが続きます。
I am sync site forever (1 server)
I am sync site until expiration secs from now (at date/time) (#_sites servers) Recovery state flags
最初のメッセージは、次に定足数を保持しようとして失敗しても、そのサイトがコーディネーターでいられる期間と定足数に参加しているサイトの数を報告します。 2 番目のメッセージの flags フィールドは、定足数の現在の状況を示す 16 進数です。値 1f は、完全なデータベース同期を示し、値 f は、コーディネーターのデータベースは正しいが、セカンダリー・サイトにもあるのかどうかを判別するために、すべてのセカンダリー・サイトにアクセスできる訳ではないことを示します。コーディネーターの選出時に、udebug コマンドが発行されると、低いほうの値が受け入れ可能となりますが、これが繰り返されれば、問題になります。個々のフラグの意味は、以下のとおりです。
コーディネーターがデータベースに変更を書き込んでいるときに、 udebug コマンドが発行されると、次の追加メッセージが表示されます。
I am currently managing write transaction identifier
I am not sync site Lowest host lowest_IP_addr was set low_time secs ago Sync host sync_IP_addr was set sync_time secs ago
lowest_IP_addr は、 Ubik プロセスが最近メッセージを受け取ったピアの最も低い IP アドレスです。一方、sync_IP_addr は現行コーディネーターの IP アドレスです。これらの IP アドレスが異なる場合、最も低い IP アドレス のマシンは、現在、コーディネーターではありません。 Ubik プロセスは、マシン間で連絡がある限り、現行コーディネーターの投票を続行し、最大限の安定度を提供します。ただし、別にコーディネーターを選出するイベントで、この Ubik プロセスは、(連絡があると仮定して)、代わりに lowest_IP_addr サイトに投票します。これは、最低の IP アドレス のサイトに対して、選出で投票するようにしてあるためです。
同期サイトとセカンダリー・サイトの両方の場合は、出力に、以下のメッセージが続きます。最初のメッセージは、同期サイトにおけるデータベースのバージョン番号を報告します。これは、その前の Local db version メッセージにより報告されている db_version と一致している必要があります。 2 番目のメッセージは、任意のオペレーションまたは特に書き込みに対して現在ロックされている VLDB レコード数を示します。オペレーションの進行中に udebug コマンドが発行される場合、この値は非ゼロになります。
Sync site's db version is db_version locked locked pages, writes of them for write
データベース・レコードについて読み取りも書き込みもロックされている場合に限り、以下のメッセージが次に表示されます。
There are read locks held There are write locks held
同様に、udebug コマンドの発行時に、読み取りまたは書き込みトランザクションが実行中である場合に限り、以下のメッセージの 1 つまたは複数が次に表示されます。
There is an active write transaction There is at least one active read transaction Transaction tid is tid
-servers 引き数で指定されたマシンがコーディネーターである場合、次のメッセージが、現在のコーディネーターが最後にデータベースを更新したのはいつかを報告します。
Last time a new db version was labelled was: last_restart secs ago (at date/time)
-servers 引き数で指定されたマシンがコーディネーターである場合、出力の最後に、定足数に入っているセカンダリー・サイトごとの項目が以下の形式で出力されます。
Server( IP_address ): (db db_version) last vote rcvd last_vote secs ago (at date/time), last beacon sent last_beacon secs ago (at date/time), last vote was { yes | no } dbcurrent={ 0 | 1 }, up={ 0 | 1 } beaconSince={ 0 | 1 }
1 行目では、サイトの IP アドレスとそれが保持しているデータベースのバージョン番号を報告します。 last_vote フィールドは、コーディネーターがそのサイトで Ubik プロセスから投票メッセージをどのくらい前に受け取ったのかを報告し、 last_beacon フィールドは、コーディネーターが投票メッセージを最後にどのくらい前に要求したのかを報告します。コーディネーター選出プロセス中に、udebug コマンドが発行されたのに、投票がまだ開始されていない場合は、次のメッセージが代わりに表示されます。
Last vote never rcvd Last beacon never sent
各項目の最終行のフィールドの意味は以下のとおりです。
-long フラグを組み込むと、 -servers 引き数がセカンダリー・サイトを指定するときに、ピア項目を作成しますが、その場合、IP_address フィールドのみ正しいことが保証されています。たとえば、db_version フィールドの値は、通常 0.0 ですが、これは、セカンダリー・サイトがこの情報に関してピアを調査しないためです。 last_vote および last_beacon フィールドの値は、このサイトがコーディネーターとして最後に投票を受け取ったのはいつか、あるいは投票を要求したのはいつかを示します。これらの値は、通常、最新のコーディネーター選出がいつだったのかを示します。
例
この例では、同期サイトである、マシン afs1 上のボリューム・ロケーション・サーバーの Ubik プロセスの状況を検査します。
% udebug afs1 vlserver Host's addresses are: 192.12.107.33 Host's 192.12.107.33 time is Wed Oct 27 09:49:50 1999 Local time is Wed Oct 27 09:49:52 1999 (time differential 2 secs) Last yes vote for 192.12.107.33 was 1 secs ago (sync site); Last vote started 1 secs ago (at Wed Oct 27 09:49:51 1999) Local db version is 940902602.674 I am sync site until 58 secs from now (at Wed Oct 27 09:50:50 1999) (3 servers) Recovery state 1f Sync site's db version is 940902602.674 0 locked pages, 0 of them for write Last time a new db version was labelled was: 129588 secs ago (at Mon Oct 25 21:50:04 1999) Server( 192.12.107.35 ): (db 940902602.674) last vote rcvd 2 secs ago (at Wed Oct 27 09:49:50 1999), last beacon sent 1 secs ago (at Wed Oct 27 09:49:51 1999), last vote was yes dbcurrent=1, up=1 beaconSince=1 Server( 192.12.107.34 ): (db 940902602.674) last vote rcvd 2 secs ago (at Wed Oct 27 09:49:50 1999), last beacon sent 1 secs ago (at Wed Oct 27 09:49:51 1999), last vote was yes dbcurrent=1, up=1 beaconSince=1
この例では、セカンダリー・サイトである、IP アドレス 192.12.107.34 のマシン上の認証サーバーの状況を検査します。ローカル・クロックは、データベース・サーバー・マシンのクロックよりも約 4 分遅れています。
% udebug 192.12.107.34 7004 Host's addresses are: 192.12.107.34 Host's 192.12.107.34 time is Wed Oct 27 09:54:15 1999 Local time is Wed Oct 27 09:50:08 1999 (time differential -247 secs) ****clock may be bad Last yes vote for 192.12.107.33 was 6 secs ago (sync site); Last vote started 6 secs ago (at Wed Oct 27 09:50:02 1999) Local db version is 940906574.25 I am not sync site Lowest host 192.12.107.33 was set 6 secs ago Sync host 192.12.107.33 was set 6 secs ago Sync site's db version is 940906574.25 0 locked pages, 0 of them for write
必要となる特権
関連情報