postgresql
集計関数
サーチ…
単純な統計情報:min()、max()、avg()
表の列の値の単純な統計を調べるには、集計関数を使用します。
あなたのindividuals
テーブルが:
名 | 年齢 |
---|---|
アリー | 17 |
アマンダ | 14 |
アラナ | 20 |
この文を書くと、最小値、最大値、平均値を得ることができます:
SELECT min(age), max(age), avg(age)
FROM individuals;
結果:
分 | 最大 | 平均 |
---|---|---|
14 | 20 | 17 |
string_agg(式、区切り文字)
string_agg()
関数を使用して、区切り文字で区切られた文字列を連結することができます。
あなたのindividuals
テーブルが:
名 | 年齢 | 国 |
---|---|---|
アリー | 15 | 米国 |
アマンダ | 14 | 米国 |
アラナ | 20 | ロシア |
SELECT ... GROUP BY
文を書くと、各国の名前を取得できます。
SELECT string_agg(name, ', ') AS names, country
FROM individuals
GROUP BY country;
string_agg()
は集約関数であるため、 GROUP BY
句を使用する必要があることに注意してください。
結果:
名前 | 国 |
---|---|
アリー、アマンダ | 米国 |
アラナ | ロシア |
regr_slope(Y、X):(X、Y)のペアで決まる最小二乗適合線形方程式の傾き
regr_slope(Y、X)の使い方を説明するために、実際の問題に適用しました。 Javaでは、メモリを適切にクリーンアップしないと、ゴミがスタックしてメモリをいっぱいにすることがあります。さまざまなクラスのメモリ使用率について毎時統計をダンプし、分析のためにpostgresデータベースにロードします。
すべてのメモリリーク候補は、より多くの時間が経過するにつれてより多くのメモリを消費する傾向があります。このトレンドをプロットすると、ラインが左上に向かっていると想像できます。
^
|
s | Legend:
i | * - data point
z | -- - trend
e |
( |
b | *
y | --
t | --
e | * -- *
s | --
) | *-- *
| -- *
| -- *
--------------------------------------->
time
ヒープ・ダンプ・ヒストグラム・データ(消費するメモリー量に対するクラスのマッピング)を含む表があるとします。
CREATE TABLE heap_histogram (
-- when the heap histogram was taken
histwhen timestamp without time zone NOT NULL,
-- the object type bytes are referring to
-- ex: java.util.String
class character varying NOT NULL,
-- the size in bytes used by the above class
bytes integer NOT NULL
);
各クラスの勾配を計算するには、クラスごとにグループ化します。 HAVING句>が0の場合、正のスロープ(行が上になり、左に移動する)の候補のみが取得されます。私たちは勾配を降順で並べ替えて、最上位のメモリ増加率でクラスを取得します。
-- epoch returns seconds
SELECT class, REGR_SLOPE(bytes,extract(epoch from histwhen)) as slope
FROM public.heap_histogram
GROUP BY class
HAVING REGR_SLOPE(bytes,extract(epoch from histwhen)) > 0
ORDER BY slope DESC ;
出力:
class | slope
---------------------------+----------------------
java.util.ArrayList | 71.7993806279174
java.util.HashMap | 49.0324576155785
java.lang.String | 31.7770770326123
joe.schmoe.BusinessObject | 23.2036817108056
java.lang.ThreadLocal | 20.9013528767851
出力から、java.util.ArrayListのメモリ消費量は、71.799バイト/秒で最速に増加しており、潜在的にメモリリークの一部であることがわかります。