Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Xiaomi
soar
提交
87dbcaf3
S
soar
项目概览
Xiaomi
/
soar
大约 2 年 前同步成功
通知
467
Star
8513
Fork
1329
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
soar
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
87dbcaf3
编写于
12月 14, 2018
作者:
L
liipx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix #155
a new config arg 'min-cardinality' for index column selection
上级
1d52539d
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
46 addition
and
36 deletion
+46
-36
advisor/index.go
advisor/index.go
+5
-1
advisor/index_test.go
advisor/index_test.go
+2
-1
common/config.go
common/config.go
+4
-0
common/testdata/TestPrintConfiguration.golden
common/testdata/TestPrintConfiguration.golden
+1
-0
vendor/vendor.json
vendor/vendor.json
+34
-34
未找到文件。
advisor/index.go
浏览文件 @
87dbcaf3
...
@@ -628,7 +628,6 @@ func (idxAdv *IndexAdvisor) buildJoinIndex(meta common.Meta) []IndexInfo {
...
@@ -628,7 +628,6 @@ func (idxAdv *IndexAdvisor) buildJoinIndex(meta common.Meta) []IndexInfo {
indexColsList
:=
make
(
map
[
string
]
map
[
string
][]
*
common
.
Column
)
indexColsList
:=
make
(
map
[
string
]
map
[
string
][]
*
common
.
Column
)
for
_
,
col
:=
range
IndexCols
{
for
_
,
col
:=
range
IndexCols
{
mergeIndex
(
indexColsList
,
col
)
mergeIndex
(
indexColsList
,
col
)
}
}
if
common
.
Config
.
TestDSN
.
Disable
||
common
.
Config
.
OnlineDSN
.
Disable
{
if
common
.
Config
.
TestDSN
.
Disable
||
common
.
Config
.
OnlineDSN
.
Disable
{
...
@@ -723,6 +722,11 @@ func (idxAdv *IndexAdvisor) buildIndexWithNoEnv(indexList map[string]map[string]
...
@@ -723,6 +722,11 @@ func (idxAdv *IndexAdvisor) buildIndexWithNoEnv(indexList map[string]map[string]
// mergeIndex 将索引用到的列去重后合并到一起
// mergeIndex 将索引用到的列去重后合并到一起
func
mergeIndex
(
idxList
map
[
string
]
map
[
string
][]
*
common
.
Column
,
column
*
common
.
Column
)
{
func
mergeIndex
(
idxList
map
[
string
]
map
[
string
][]
*
common
.
Column
,
column
*
common
.
Column
)
{
// 散粒度低于阈值将不会添加索引
if
common
.
Config
.
MinCardinality
>
column
.
Cardinality
{
return
}
db
:=
column
.
DB
db
:=
column
.
DB
tb
:=
column
.
Table
tb
:=
column
.
Table
if
idxList
[
db
]
==
nil
{
if
idxList
[
db
]
==
nil
{
...
...
advisor/index_test.go
浏览文件 @
87dbcaf3
...
@@ -357,6 +357,7 @@ func TestRuleUpdatePrimaryKey(t *testing.T) {
...
@@ -357,6 +357,7 @@ func TestRuleUpdatePrimaryKey(t *testing.T) {
func
TestIndexAdvise
(
t
*
testing
.
T
)
{
func
TestIndexAdvise
(
t
*
testing
.
T
)
{
common
.
Log
.
Debug
(
"Entering function: %s"
,
common
.
GetFunctionName
())
common
.
Log
.
Debug
(
"Entering function: %s"
,
common
.
GetFunctionName
())
// common.Config.MinCardinality = 1
vEnv
,
rEnv
:=
env
.
BuildEnv
()
vEnv
,
rEnv
:=
env
.
BuildEnv
()
defer
vEnv
.
CleanUp
()
defer
vEnv
.
CleanUp
()
...
@@ -377,7 +378,7 @@ func TestIndexAdvise(t *testing.T) {
...
@@ -377,7 +378,7 @@ func TestIndexAdvise(t *testing.T) {
if
idxAdvisor
!=
nil
{
if
idxAdvisor
!=
nil
{
rule
:=
idxAdvisor
.
IndexAdvise
()
.
Format
()
rule
:=
idxAdvisor
.
IndexAdvise
()
.
Format
()
if
len
(
rule
)
>
0
{
if
len
(
rule
)
>
0
{
pretty
.
Println
(
rule
)
_
,
_
=
pretty
.
Println
(
rule
)
}
}
}
}
}
}
...
...
common/config.go
浏览文件 @
87dbcaf3
...
@@ -110,6 +110,7 @@ type Configuration struct {
...
@@ -110,6 +110,7 @@ type Configuration struct {
MaxSubqueryDepth
int
`yaml:"max-subquery-depth"`
// 子查询最大尝试
MaxSubqueryDepth
int
`yaml:"max-subquery-depth"`
// 子查询最大尝试
MaxVarcharLength
int
`yaml:"max-varchar-length"`
// varchar最大长度
MaxVarcharLength
int
`yaml:"max-varchar-length"`
// varchar最大长度
ColumnNotAllowType
[]
string
`yaml:"column-not-allow-type"`
// 字段不允许使用的数据类型
ColumnNotAllowType
[]
string
`yaml:"column-not-allow-type"`
// 字段不允许使用的数据类型
MinCardinality
float64
`yaml:"min-cardinality"`
// 添加索引散粒度阈值,范围 0~100
// ++++++++++++++EXPLAIN检查项+++++++++++++
// ++++++++++++++EXPLAIN检查项+++++++++++++
ExplainSQLReportType
string
`yaml:"explain-sql-report-type"`
// EXPLAIN markdown 格式输出 SQL 样式,支持 sample, fingerprint, pretty 等
ExplainSQLReportType
string
`yaml:"explain-sql-report-type"`
// EXPLAIN markdown 格式输出 SQL 样式,支持 sample, fingerprint, pretty 等
...
@@ -163,6 +164,7 @@ var Config = &Configuration{
...
@@ -163,6 +164,7 @@ var Config = &Configuration{
ConnTimeOut
:
3
,
ConnTimeOut
:
3
,
QueryTimeOut
:
30
,
QueryTimeOut
:
30
,
Delimiter
:
";"
,
Delimiter
:
";"
,
MinCardinality
:
0
,
MaxJoinTableCount
:
5
,
MaxJoinTableCount
:
5
,
MaxGroupByColsCount
:
5
,
MaxGroupByColsCount
:
5
,
...
@@ -512,6 +514,7 @@ func readCmdFlags() error {
...
@@ -512,6 +514,7 @@ func readCmdFlags() error {
connTimeOut
:=
flag
.
Int
(
"conn-time-out"
,
Config
.
ConnTimeOut
,
"ConnTimeOut, 数据库连接超时时间,单位秒"
)
connTimeOut
:=
flag
.
Int
(
"conn-time-out"
,
Config
.
ConnTimeOut
,
"ConnTimeOut, 数据库连接超时时间,单位秒"
)
queryTimeOut
:=
flag
.
Int
(
"query-time-out"
,
Config
.
QueryTimeOut
,
"QueryTimeOut, 数据库SQL执行超时时间,单位秒"
)
queryTimeOut
:=
flag
.
Int
(
"query-time-out"
,
Config
.
QueryTimeOut
,
"QueryTimeOut, 数据库SQL执行超时时间,单位秒"
)
delimiter
:=
flag
.
String
(
"delimiter"
,
Config
.
Delimiter
,
"Delimiter, SQL分隔符"
)
delimiter
:=
flag
.
String
(
"delimiter"
,
Config
.
Delimiter
,
"Delimiter, SQL分隔符"
)
minCardinality
:=
flag
.
Float64
(
"min-cardinality"
,
Config
.
MinCardinality
,
"MinCardinality,索引列散粒度最低阈值,散粒度低于该值的列不添加索引,建议范围0.0 ~ 100.0"
)
// +++++++++++++++日志相关+++++++++++++++++
// +++++++++++++++日志相关+++++++++++++++++
logLevel
:=
flag
.
Int
(
"log-level"
,
Config
.
LogLevel
,
"LogLevel, 日志级别, [0:Emergency, 1:Alert, 2:Critical, 3:Error, 4:Warning, 5:Notice, 6:Informational, 7:Debug]"
)
logLevel
:=
flag
.
Int
(
"log-level"
,
Config
.
LogLevel
,
"LogLevel, 日志级别, [0:Emergency, 1:Alert, 2:Critical, 3:Error, 4:Warning, 5:Notice, 6:Informational, 7:Debug]"
)
logOutput
:=
flag
.
String
(
"log-output"
,
Config
.
LogOutput
,
"LogOutput, 日志输出位置"
)
logOutput
:=
flag
.
String
(
"log-output"
,
Config
.
LogOutput
,
"LogOutput, 日志输出位置"
)
...
@@ -612,6 +615,7 @@ func readCmdFlags() error {
...
@@ -612,6 +615,7 @@ func readCmdFlags() error {
Config
.
IgnoreRules
=
strings
.
Split
(
*
ignoreRules
,
","
)
Config
.
IgnoreRules
=
strings
.
Split
(
*
ignoreRules
,
","
)
Config
.
RewriteRules
=
strings
.
Split
(
*
rewriteRules
,
","
)
Config
.
RewriteRules
=
strings
.
Split
(
*
rewriteRules
,
","
)
*
blackList
=
strings
.
TrimSpace
(
*
blackList
)
*
blackList
=
strings
.
TrimSpace
(
*
blackList
)
Config
.
MinCardinality
=
*
minCardinality
if
filepath
.
IsAbs
(
*
blackList
)
||
*
blackList
==
""
{
if
filepath
.
IsAbs
(
*
blackList
)
||
*
blackList
==
""
{
Config
.
BlackList
=
*
blackList
Config
.
BlackList
=
*
blackList
...
...
common/testdata/TestPrintConfiguration.golden
浏览文件 @
87dbcaf3
...
@@ -71,6 +71,7 @@ max-subquery-depth: 5
...
@@ -71,6 +71,7 @@ max-subquery-depth: 5
max-varchar-length: 1024
max-varchar-length: 1024
column-not-allow-type:
column-not-allow-type:
- boolean
- boolean
min-cardinality: 0
explain-sql-report-type: pretty
explain-sql-report-type: pretty
explain-type: extended
explain-type: extended
explain-format: traditional
explain-format: traditional
...
...
vendor/vendor.json
浏览文件 @
87dbcaf3
...
@@ -167,44 +167,44 @@
...
@@ -167,44 +167,44 @@
{
{
"checksumSHA1"
:
"fWqL/7jTYOiqDNmiUcQi3u45Hw0="
,
"checksumSHA1"
:
"fWqL/7jTYOiqDNmiUcQi3u45Hw0="
,
"path"
:
"github.com/pingcap/tidb/sessionctx/stmtctx"
,
"path"
:
"github.com/pingcap/tidb/sessionctx/stmtctx"
,
"revision"
:
"
9f51a626e6587118db4306882a5578e7ffe3d2a6
"
,
"revision"
:
"
4ccd7456fcdc5e62e68f49a0a542cbcf88e38343
"
,
"revisionTime"
:
"2018-12-13T0
5:17:24
Z"
"revisionTime"
:
"2018-12-13T0
9:52:39
Z"
},
},
{
{
"checksumSHA1"
:
"0CCq+3fAyaXs9XU+xWaRvbbtSOQ="
,
"checksumSHA1"
:
"0CCq+3fAyaXs9XU+xWaRvbbtSOQ="
,
"path"
:
"github.com/pingcap/tidb/types"
,
"path"
:
"github.com/pingcap/tidb/types"
,
"revision"
:
"
9f51a626e6587118db4306882a5578e7ffe3d2a6
"
,
"revision"
:
"
4ccd7456fcdc5e62e68f49a0a542cbcf88e38343
"
,
"revisionTime"
:
"2018-12-13T0
5:17:24
Z"
"revisionTime"
:
"2018-12-13T0
9:52:39
Z"
},
},
{
{
"checksumSHA1"
:
"DWVD7+ygtT66IQ+cqXmMJ5OVqUk="
,
"checksumSHA1"
:
"DWVD7+ygtT66IQ+cqXmMJ5OVqUk="
,
"path"
:
"github.com/pingcap/tidb/types/json"
,
"path"
:
"github.com/pingcap/tidb/types/json"
,
"revision"
:
"
9f51a626e6587118db4306882a5578e7ffe3d2a6
"
,
"revision"
:
"
4ccd7456fcdc5e62e68f49a0a542cbcf88e38343
"
,
"revisionTime"
:
"2018-12-13T0
5:17:24
Z"
"revisionTime"
:
"2018-12-13T0
9:52:39
Z"
},
},
{
{
"checksumSHA1"
:
"Zp5ME8OXNTmHnYTwJJUZlydN4/U="
,
"checksumSHA1"
:
"Zp5ME8OXNTmHnYTwJJUZlydN4/U="
,
"path"
:
"github.com/pingcap/tidb/types/parser_driver"
,
"path"
:
"github.com/pingcap/tidb/types/parser_driver"
,
"revision"
:
"
9f51a626e6587118db4306882a5578e7ffe3d2a6
"
,
"revision"
:
"
4ccd7456fcdc5e62e68f49a0a542cbcf88e38343
"
,
"revisionTime"
:
"2018-12-13T0
5:17:24
Z"
"revisionTime"
:
"2018-12-13T0
9:52:39
Z"
},
},
{
{
"checksumSHA1"
:
"s709bhSrG2Ec35406mGtrySid4s="
,
"checksumSHA1"
:
"s709bhSrG2Ec35406mGtrySid4s="
,
"path"
:
"github.com/pingcap/tidb/util/execdetails"
,
"path"
:
"github.com/pingcap/tidb/util/execdetails"
,
"revision"
:
"
9f51a626e6587118db4306882a5578e7ffe3d2a6
"
,
"revision"
:
"
4ccd7456fcdc5e62e68f49a0a542cbcf88e38343
"
,
"revisionTime"
:
"2018-12-13T0
5:17:24
Z"
"revisionTime"
:
"2018-12-13T0
9:52:39
Z"
},
},
{
{
"checksumSHA1"
:
"nUC7zVoAMNR2a+z2iGqHoN2AkFE="
,
"checksumSHA1"
:
"nUC7zVoAMNR2a+z2iGqHoN2AkFE="
,
"path"
:
"github.com/pingcap/tidb/util/hack"
,
"path"
:
"github.com/pingcap/tidb/util/hack"
,
"revision"
:
"
9f51a626e6587118db4306882a5578e7ffe3d2a6
"
,
"revision"
:
"
4ccd7456fcdc5e62e68f49a0a542cbcf88e38343
"
,
"revisionTime"
:
"2018-12-13T0
5:17:24
Z"
"revisionTime"
:
"2018-12-13T0
9:52:39
Z"
},
},
{
{
"checksumSHA1"
:
"xSyepiuqsoaaeDch7cXeumvVHKM="
,
"checksumSHA1"
:
"xSyepiuqsoaaeDch7cXeumvVHKM="
,
"path"
:
"github.com/pingcap/tidb/util/memory"
,
"path"
:
"github.com/pingcap/tidb/util/memory"
,
"revision"
:
"
9f51a626e6587118db4306882a5578e7ffe3d2a6
"
,
"revision"
:
"
4ccd7456fcdc5e62e68f49a0a542cbcf88e38343
"
,
"revisionTime"
:
"2018-12-13T0
5:17:24
Z"
"revisionTime"
:
"2018-12-13T0
9:52:39
Z"
},
},
{
{
"checksumSHA1"
:
"SmYeIK/fIYXNu8IKxD6HOVQVTuU="
,
"checksumSHA1"
:
"SmYeIK/fIYXNu8IKxD6HOVQVTuU="
,
...
@@ -401,62 +401,62 @@
...
@@ -401,62 +401,62 @@
{
{
"checksumSHA1"
:
"aKn1oKcY74N8TRLm3Ayt7Q4bbI4="
,
"checksumSHA1"
:
"aKn1oKcY74N8TRLm3Ayt7Q4bbI4="
,
"path"
:
"vitess.io/vitess/go/bytes2"
,
"path"
:
"vitess.io/vitess/go/bytes2"
,
"revision"
:
"
84a3524002899f761096c454e02924774c61d6ee
"
,
"revision"
:
"
eb5a5e0e435db30856600b794d8cff235fdf24b7
"
,
"revisionTime"
:
"2018-12-1
2T17:00:54
Z"
"revisionTime"
:
"2018-12-1
3T22:28:01
Z"
},
},
{
{
"checksumSHA1"
:
"JVCEN4UGRmg3TofIBdzZMZ3G0Ww="
,
"checksumSHA1"
:
"JVCEN4UGRmg3TofIBdzZMZ3G0Ww="
,
"path"
:
"vitess.io/vitess/go/hack"
,
"path"
:
"vitess.io/vitess/go/hack"
,
"revision"
:
"
84a3524002899f761096c454e02924774c61d6ee
"
,
"revision"
:
"
eb5a5e0e435db30856600b794d8cff235fdf24b7
"
,
"revisionTime"
:
"2018-12-1
2T17:00:54
Z"
"revisionTime"
:
"2018-12-1
3T22:28:01
Z"
},
},
{
{
"checksumSHA1"
:
"e1WJ7vCnVrlQQQlc6n/FewCDMso="
,
"checksumSHA1"
:
"e1WJ7vCnVrlQQQlc6n/FewCDMso="
,
"path"
:
"vitess.io/vitess/go/sqltypes"
,
"path"
:
"vitess.io/vitess/go/sqltypes"
,
"revision"
:
"
84a3524002899f761096c454e02924774c61d6ee
"
,
"revision"
:
"
eb5a5e0e435db30856600b794d8cff235fdf24b7
"
,
"revisionTime"
:
"2018-12-1
2T17:00:54
Z"
"revisionTime"
:
"2018-12-1
3T22:28:01
Z"
},
},
{
{
"checksumSHA1"
:
"ntFIQYkBS51G6y+FEkjFW40+HOU="
,
"checksumSHA1"
:
"ntFIQYkBS51G6y+FEkjFW40+HOU="
,
"path"
:
"vitess.io/vitess/go/vt/log"
,
"path"
:
"vitess.io/vitess/go/vt/log"
,
"revision"
:
"
84a3524002899f761096c454e02924774c61d6ee
"
,
"revision"
:
"
eb5a5e0e435db30856600b794d8cff235fdf24b7
"
,
"revisionTime"
:
"2018-12-1
2T17:00:54
Z"
"revisionTime"
:
"2018-12-1
3T22:28:01
Z"
},
},
{
{
"checksumSHA1"
:
"tPQFPwbMdjuX0qjNl4Zl8zc37JQ="
,
"checksumSHA1"
:
"tPQFPwbMdjuX0qjNl4Zl8zc37JQ="
,
"path"
:
"vitess.io/vitess/go/vt/proto/query"
,
"path"
:
"vitess.io/vitess/go/vt/proto/query"
,
"revision"
:
"
84a3524002899f761096c454e02924774c61d6ee
"
,
"revision"
:
"
eb5a5e0e435db30856600b794d8cff235fdf24b7
"
,
"revisionTime"
:
"2018-12-1
2T17:00:54
Z"
"revisionTime"
:
"2018-12-1
3T22:28:01
Z"
},
},
{
{
"checksumSHA1"
:
"o0tR/c7lgr0pLkxk7CdvjiNDAKU="
,
"checksumSHA1"
:
"o0tR/c7lgr0pLkxk7CdvjiNDAKU="
,
"path"
:
"vitess.io/vitess/go/vt/proto/topodata"
,
"path"
:
"vitess.io/vitess/go/vt/proto/topodata"
,
"revision"
:
"
84a3524002899f761096c454e02924774c61d6ee
"
,
"revision"
:
"
eb5a5e0e435db30856600b794d8cff235fdf24b7
"
,
"revisionTime"
:
"2018-12-1
2T17:00:54
Z"
"revisionTime"
:
"2018-12-1
3T22:28:01
Z"
},
},
{
{
"checksumSHA1"
:
"77UojBqi0yyeQvR70j7C3kcKclQ="
,
"checksumSHA1"
:
"77UojBqi0yyeQvR70j7C3kcKclQ="
,
"path"
:
"vitess.io/vitess/go/vt/proto/vtgate"
,
"path"
:
"vitess.io/vitess/go/vt/proto/vtgate"
,
"revision"
:
"
84a3524002899f761096c454e02924774c61d6ee
"
,
"revision"
:
"
eb5a5e0e435db30856600b794d8cff235fdf24b7
"
,
"revisionTime"
:
"2018-12-1
2T17:00:54
Z"
"revisionTime"
:
"2018-12-1
3T22:28:01
Z"
},
},
{
{
"checksumSHA1"
:
"QpWGhoVDwM+8+sgYLI/YU+95iGU="
,
"checksumSHA1"
:
"QpWGhoVDwM+8+sgYLI/YU+95iGU="
,
"path"
:
"vitess.io/vitess/go/vt/proto/vtrpc"
,
"path"
:
"vitess.io/vitess/go/vt/proto/vtrpc"
,
"revision"
:
"
84a3524002899f761096c454e02924774c61d6ee
"
,
"revision"
:
"
eb5a5e0e435db30856600b794d8cff235fdf24b7
"
,
"revisionTime"
:
"2018-12-1
2T17:00:54
Z"
"revisionTime"
:
"2018-12-1
3T22:28:01
Z"
},
},
{
{
"checksumSHA1"
:
"lENrUY/YyxwYFHYN+21TBH92P3U="
,
"checksumSHA1"
:
"lENrUY/YyxwYFHYN+21TBH92P3U="
,
"path"
:
"vitess.io/vitess/go/vt/sqlparser"
,
"path"
:
"vitess.io/vitess/go/vt/sqlparser"
,
"revision"
:
"
84a3524002899f761096c454e02924774c61d6ee
"
,
"revision"
:
"
eb5a5e0e435db30856600b794d8cff235fdf24b7
"
,
"revisionTime"
:
"2018-12-1
2T17:00:54
Z"
"revisionTime"
:
"2018-12-1
3T22:28:01
Z"
},
},
{
{
"checksumSHA1"
:
"oF4XzuOzwvj1iduX/lYqNSyY/HM="
,
"checksumSHA1"
:
"oF4XzuOzwvj1iduX/lYqNSyY/HM="
,
"path"
:
"vitess.io/vitess/go/vt/vterrors"
,
"path"
:
"vitess.io/vitess/go/vt/vterrors"
,
"revision"
:
"
84a3524002899f761096c454e02924774c61d6ee
"
,
"revision"
:
"
eb5a5e0e435db30856600b794d8cff235fdf24b7
"
,
"revisionTime"
:
"2018-12-1
2T17:00:54
Z"
"revisionTime"
:
"2018-12-1
3T22:28:01
Z"
}
}
],
],
"rootPath"
:
"github.com/XiaoMi/soar"
"rootPath"
:
"github.com/XiaoMi/soar"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录