配置文件说明

配置文件为yaml格式。一般情况下只需要配置online-dsn, test-dsn, log-output等少数几个参数。即使不创建配置文件SOAR仍然会给出基本的启发式建议。

默认文件会按照/etc/soar.yaml, ./etc/soar.yaml, ./soar.yaml顺序加载,找到第一个后不再继续加载后面的配置文件。如需指定其他配置文件可以通过-config参数指定。

  1. # 线上环境配置
  2. online-dsn:
  3. addr: 127.0.0.1:3306
  4. schema: sakila
  5. user: root
  6. password: 1t'sB1g3rt
  7. disable: false
  8. # 测试环境配置
  9. test-dsn:
  10. addr: 127.0.0.1:3307
  11. schema: test
  12. user: root
  13. password: 1t'sB1g3rt
  14. disable: false
  15. # 是否允许测试环境与线上环境配置相同
  16. allow-online-as-test: true
  17. # 是否清理测试时产生的临时文件
  18. drop-test-temporary: true
  19. # 语法检查小工具
  20. only-syntax-check: false
  21. sampling-data-factor: 100
  22. sampling: true
  23. # 日志级别,[0:Emergency, 1:Alert, 2:Critical, 3:Error, 4:Warning, 5:Notice, 6:Informational, 7:Debug]
  24. log-level: 7
  25. log-output: ${BASE_DIR}/soar.log
  26. # 优化建议输出格式
  27. report-type: markdown
  28. ignore-rules:
  29. - ""
  30. blacklist: ${BASE_DIR}/soar.blacklist
  31. # 启发式算法相关配置
  32. max-join-table-count: 5
  33. max-group-by-cols-count: 5
  34. max-distinct-count: 5
  35. max-index-cols-count: 5
  36. max-total-rows: 9999999
  37. spaghetti-query-length: 2048
  38. allow-drop-index: false
  39. # EXPLAIN相关配置
  40. explain-sql-report-type: pretty
  41. explain-type: extended
  42. explain-format: traditional
  43. explain-warn-select-type:
  44. - ""
  45. explain-warn-access-type:
  46. - ALL
  47. explain-max-keys: 3
  48. explain-min-keys: 0
  49. explain-max-rows: 10000
  50. explain-warn-extra:
  51. - ""
  52. explain-max-filtered: 100
  53. explain-warn-scalability:
  54. - O(n)
  55. query: ""
  56. list-heuristic-rules: false
  57. list-test-sqls: false
  58. verbose: true

命令行参数

几乎所有配置文件中指定的参数都通通过命令行参数进行修改,且命令行参数优先级较配置文件优先级高。

  1. $ soar -h

命令行参数配置DSN

  1. $ soar -online-dsn "user:password@hostname:port/database"
  2. $ soar -test-dsn "user:password@hostname:port/database"

DSN格式支持

  • “user:password@hostname:3307/database”
  • “user:password@hostname:3307”
  • “user:password@hostname:/database”
  • “user:password@:3307/database”
  • “user:password@”
  • “hostname:3307/database”
  • @hostname:3307/database”
  • @hostname
  • “hostname”
  • “@/database”
  • @hostname:3307”
  • “@:3307/database”
  • “:3307/database”
  • “/database”

SQL评分

不同类型的建议指定的Severity不同,严重程度数字由低到高依次排序。满分100分,扣到0分为止。L0不扣分只给出建议,L1扣5分,L2扣10分,每级多扣5分以此类推。当由时给出L1, L2两要建议时扣分叠加,即扣15分。

如果您想给出不同的扣分建议或者对指引中的文字内容不满意可以为在git中提ISSUE,也可直接修改rules.go的相应配置然后重新编译自己的版本。