ASEを使用して単純なチャージ バック ユーティリティを実装できます。これによって、1ユーザーが消費する、日別のシステムCPU時間とディスク アクティビティの量を特定できます。ユーザーのアカウント名に特別な文字を数個追加するだけで、そのユーザーが行なった処理についての詳細な情報をシステム テーブルから取り出すことができます。Teradata Databaseは、この特別な文字をセッション番号、リクエスト番号、アカウント名がシステム テーブルに書き込まれた日付や時間といった情報に展開します。
1つのSQLステップが完了するたびに、Teradata Databaseは必ずリクエストに関する統計でDBC.Acctgテーブルを更新します。統計には、リクエストによって使用されたCPU時間(単位: 秒)の合計と論理ディスク入出力数が含まれます。この統計情報がユーザー名とアカウント名が同じ既存の行に追加され、集計されます。
構成
次の例では、追跡する各ユーザーのアカウント列を変更します。各アカウント文字列の先頭にCB&Dというテキストを挿入します。必要な場合には、この4文字に続けて任意のアカウント情報を追加できます。
アカウント名に日付が追加されているとき、日によってアカウント名が実際に変わり、DBC.Acctgテーブルに毎日新しい行が追加されます。この行には、その日に実行された各リクエストに対するCPU時間の合計秒数とディスク入出力の合計数が記録されます。
&Dは、YYMMDDの形式で現在の日付に展開されるASEトークンです。CBを使用して、チャージ バックのためにそのアカウントが追跡中であることを示すことができます。
ユーザーの既存のアカウント列を変更するためには、次のSQLコマンドを使用します。
MODIFY USER JANETJONES AS ACCOUNT = ('CB&D');
例
SELECT ACCOUNTNAME, USERNAME, SUM(CPUTIME), SUM(DISKIO) FROM DBC.AMPUSAGE WHERE SUBSTR(ACCOUNTNAME, 1, 2) = 'CB' GROUP BY USERNAME, ACCOUNTNAME ORDER BY USERNAME, ACCOUNTNAME; *** Query completed. 11 rows found. 4 columns returned. *** Total elapsed time was 2 seconds. AccountName UserName Sum(CpuTime) Sum(DiskIO) -------------- ------------- ------------------ --------------- CB060902 JANETJONES 1,498.64 3,444,236 CB060903 JANETJONES 934.23 1,588,764 CB060904 JANETJONES 883.74 924,262 CB060905 JANETJONES 214.99 200,657 CB060902 JOHNSMITH 440.05 396,338 CB060903 JOHNSMITH 380.12 229,730 CB060904 JOHNSMITH 112.17 184,922 CB060905 JOHNSMITH 56.88 99,677 CB060902 SAMOREILLY 340.34 410,178 CB060903 SAMOREILLY 70.74 56,637 CB060902 WEEKLY 3,498.03 7,311,733 If we wanted to charge $0.25 per CPU second and bill for the month of September 2006, we could use the following query to generate the bill: SELECT USERNAME, SUM(CPUTIME)*0.25 (FORMAT '$$ZZZ,ZZZ,ZZ9.99') FROM DBC.AMPUSAGE WHERE SUBSTR(ACCOUNTNAME, 1, 6) = 'CB0609' GROUP BY 1 ORDER BY 1 WITH SUM(CPUTIME)*0.25 (FORMAT '$$ZZZ,ZZZ,ZZ9.99', TITLE 'Grand Total:'); *** Query completed. 4 rows found. 2 columns returned. *** Total elapsed time was 2 seconds. UserName (Sum(CpuTime)*0.25) ------------------------------ ------------------- JANETJONES $882.90 JOHNSMITH $247.33 SAMOREILLY $102.77 WEEKLY $874.51 ------------------- Grand Total: $2,107.51
チャージ バックとオーバーヘッド
CPUから見た場合、チャージ バックにオーバーヘッドはほとんどありません。アカウント処理テーブルは、各文の完了時にすでに更新されています。唯一のコストは、ユーザーごとに毎日行に追加される新しい行です。領域的に見た場合、アカウント処理テーブルは毎日1人のユーザーにつき1行ずつ大きくなります。この増大は定期的なクリーンアップで解消できます。