Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
aab00fa3
提交
aab00fa3
authored
11 年前
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Formatting / javadocs
上级
ccf8ee20
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
189 行增加
和
141 行删除
+189
-141
SetTypes.java
h2/src/main/org/h2/command/dml/SetTypes.java
+1
-2
Database.java
h2/src/main/org/h2/engine/Database.java
+2
-2
QueryStatisticsData.java
h2/src/main/org/h2/engine/QueryStatisticsData.java
+186
-137
没有找到文件。
h2/src/main/org/h2/command/dml/SetTypes.java
浏览文件 @
aab00fa3
...
...
@@ -219,7 +219,6 @@ public class SetTypes {
*/
public
static
final
int
QUERY_STATISTICS
=
41
;
private
static
final
ArrayList
<
String
>
TYPES
=
New
.
arrayList
();
private
SetTypes
()
{
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/engine/Database.java
浏览文件 @
aab00fa3
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/engine/QueryStatisticsData.java
浏览文件 @
aab00fa3
...
...
@@ -13,7 +13,7 @@ import java.util.HashMap;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
.Entry
;
/**
* Maintains query statistics.
...
...
@@ -32,7 +32,8 @@ public class QueryStatisticsData {
private
final
HashMap
<
String
,
QueryEntry
>
map
=
new
HashMap
<
String
,
QueryEntry
>();
public
synchronized
List
<
QueryEntry
>
getQueries
()
{
// return a copy of the map so we don't have to worry about external synchronization
// return a copy of the map so we don't have to
// worry about external synchronization
ArrayList
<
QueryEntry
>
list
=
new
ArrayList
<
QueryEntry
>();
list
.
addAll
(
map
.
values
());
// only return the newest 100 entries
...
...
@@ -51,32 +52,9 @@ public class QueryStatisticsData {
QueryEntry
entry
=
map
.
get
(
sqlStatement
);
if
(
entry
==
null
)
{
entry
=
new
QueryEntry
();
entry
.
sqlStatement
=
sqlStatement
;
entry
.
executionTimeMin
=
executionTime
;
entry
.
executionTimeMax
=
executionTime
;
entry
.
rowCountMin
=
rowCount
;
entry
.
rowCountMax
=
rowCount
;
entry
.
executionTimeMean
=
executionTime
;
entry
.
rowCountMean
=
rowCount
;
map
.
put
(
sqlStatement
,
entry
);
}
else
{
entry
.
count
++;
entry
.
executionTimeMin
=
Math
.
min
(
executionTime
,
entry
.
executionTimeMin
);
entry
.
executionTimeMax
=
Math
.
max
(
executionTime
,
entry
.
executionTimeMax
);
entry
.
rowCountMin
=
Math
.
min
(
rowCount
,
entry
.
rowCountMin
);
entry
.
rowCountMax
=
Math
.
max
(
rowCount
,
entry
.
rowCountMax
);
double
delta
=
rowCount
-
entry
.
rowCountMean
;
entry
.
rowCountMean
+=
delta
/
entry
.
count
;
entry
.
rowCountM2
+=
delta
*
(
rowCount
-
entry
.
rowCountMean
);
delta
=
executionTime
-
entry
.
executionTimeMean
;
entry
.
executionTimeMean
+=
delta
/
entry
.
count
;
entry
.
executionTimeM2
+=
delta
*
(
executionTime
-
entry
.
executionTimeMean
);
}
entry
.
executionTimeCumulative
+=
executionTime
;
entry
.
rowCountCumulative
+=
rowCount
;
entry
.
lastUpdateTime
=
System
.
currentTimeMillis
();
entry
.
update
(
executionTime
,
rowCount
);
// Age-out the oldest entries if the map gets too big.
// Test against 1.5 x max-size so we don't do this too often
...
...
@@ -87,12 +65,12 @@ public class QueryStatisticsData {
Collections
.
sort
(
list
,
QUERY_ENTRY_COMPARATOR
);
// Create a set of the oldest 1/3 of the entries
HashSet
<
QueryEntry
>
oldestSet
=
new
HashSet
<
QueryEntry
>(
list
.
subList
(
0
,
list
.
size
()
/
3
));
// Loop over the map using the set and remove
the oldest 1/3 of the
//
entries.
for
(
Iterator
<
Map
.
Entry
<
String
,
QueryEntry
>>
iter
=
map
.
entrySet
().
iterator
();
iter
.
hasNext
();)
{
Map
.
Entry
<
String
,
QueryEntry
>
mapEntry
=
iter
.
next
();
// Loop over the map using the set and remove
//
the oldest 1/3 of the entries.
for
(
Iterator
<
Entry
<
String
,
QueryEntry
>>
it
=
map
.
entrySet
().
iterator
();
it
.
hasNext
();)
{
Entry
<
String
,
QueryEntry
>
mapEntry
=
it
.
next
();
if
(
oldestSet
.
contains
(
mapEntry
.
getValue
()))
{
it
er
.
remove
();
it
.
remove
();
}
}
}
...
...
@@ -103,24 +81,95 @@ public class QueryStatisticsData {
*/
public
static
final
class
QueryEntry
{
/**
* The SQL statement.
*/
public
String
sqlStatement
;
public
int
count
=
1
;
/**
* The number of times the statement was executed.
*/
public
int
count
;
/**
* The last time the statistics for this entry were updated,
* in milliseconds since 1970.
*/
public
long
lastUpdateTime
;
/**
* The minimum execution time, in milliseconds.
*/
public
long
executionTimeMin
;
/**
* The maximum execution time, in milliseconds.
*/
public
long
executionTimeMax
;
/**
* The total execution time.
*/
public
long
executionTimeCumulative
;
/**
* The minimum number of rows.
*/
public
int
rowCountMin
;
/**
* The maximum number of rows.
*/
public
int
rowCountMax
;
/**
* The total number of rows.
*/
public
long
rowCountCumulative
;
/**
* The mean execution time.
*/
public
double
executionTimeMean
;
/**
* The mean number of rows.
*/
public
double
rowCountMean
;
// Using Welford's method, see also
// http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
// http://www.johndcook.com/standard_deviation.html
public
double
executionTimeMean
;
public
double
executionTimeM2
;
public
double
rowCountMean
;
public
double
rowCountM2
;
private
double
executionTimeM2
;
private
double
rowCountM2
;
/**
* Update the statistics entry.
*
* @param time the execution time
* @param rows the number of rows
*/
void
update
(
long
time
,
int
rows
)
{
count
++;
executionTimeMin
=
Math
.
min
(
time
,
executionTimeMin
);
executionTimeMax
=
Math
.
max
(
time
,
executionTimeMax
);
rowCountMin
=
Math
.
min
(
rows
,
rowCountMin
);
rowCountMax
=
Math
.
max
(
rows
,
rowCountMax
);
double
delta
=
rows
-
rowCountMean
;
rowCountMean
+=
delta
/
count
;
rowCountM2
+=
delta
*
(
rows
-
rowCountMean
);
delta
=
time
-
executionTimeMean
;
executionTimeMean
+=
delta
/
count
;
executionTimeM2
+=
delta
*
(
time
-
executionTimeMean
);
executionTimeCumulative
+=
time
;
rowCountCumulative
+=
rows
;
lastUpdateTime
=
System
.
currentTimeMillis
();
}
public
double
getExecutionTimeStandardDeviation
()
{
// population standard deviation
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论