【机器学习化DBMS】——ottertune客户端部署安装

13 篇文章 7 订阅
7 篇文章 1 订阅

一、准备工作

     1、操作系统:Ubuntu Linux 16.04+ (64-bit)

二、客户端运行原理

    客户端由一个驱动程序和一个控制器组成。驱动程序控制客户端的所有控制流,控制器收集DBMS旋钮和度量数据。

        

       1、步骤一:驱动程序首先清除缓存并重新启动数据库。它还检查磁盘使用量是否超过最大使用量(由用户定义的阈值)。如果是这样,驱动程序将丢弃实验数据库并重新加载基准,以确保有足够的空间进行实验,并且控制器可以收集DBMS旋钮和度量数据(DBMS knobs and metrics data)。

       2、步骤二:然后驱动程序将oltpbenchmark作为后台作业运行。oltpbenchmark是关系数据库的基准套件。当基准准备开始测量时,驱动程序向控制器发送一个信号,开始实验并等待基准完成。实验观察时间的长度在基准配置文件中定义.。

       3、步骤三:控制器在观察前首先收集knobs and metrics data。然后等待直到驱动程序发送另一个信号。

       4、步骤四:OLTPbenchmark完成测量后,驱动程序向控制器发送终止信号。在接收到信号后,控制器再次收集度量数据。控制器将所有收集的旋钮和度量数据以及元数据摘要(即数据库名称和版本、观察长度、开始/结束时间、工作负荷名称)格式化为JSON文件,并将这些文件发送回驱动程序。

       5、步骤五:驱动程序将控制器收集的所有DBMS数据上载到服务器。驱动程序将从服务器接收一个唯一的令牌,并使用该令牌定期检查服务器是否已完成推荐的新配置。

       6、步骤六:如果服务器已成功生成下一个配置,驱动程序将从服务器查询新配置并将其安装到数据库。

 

三、配置项

     客户端文件构成如下:  

.
├── controller
│   ├── build.gradle
│   ├── config
│   │   ├── sample_mysql_config.json   //mysql连接的基本信息
│   │   ├── sample_postgres_config.json  //postgres连接的基本信息
│   │   └── sample_saphana_config.json   //saphana连接的基本信息
│   ├── gradle
│   │   └── wrapper
│   │       └── gradle-wrapper.properties   //gradle基本信息
│   ├── log4j.properties
│   ├── README.md
│   ├── sample_output
│   │   ├── mysql
│   │   │   ├── knobs.json
│   │   │   ├── metrics_after.json
│   │   │   ├── metrics_before.json
│   │   │   └── summary.json
│   │   ├── postgres
│   │   │   ├── knobs.json
│   │   │   ├── metrics_after.json
│   │   │   ├── metrics_before.json
│   │   │   └── summary.json
│   │   └── saphana
│   │       ├── knobs.json
│   │       ├── metrics_after.json
│   │       ├── metrics_before.json
│   │       └── summary.json
│   └── src
│       ├── main
│       │   └── java
│       │       └── com
│       │           └── controller   //信息收集器
│       │               ├── collectors
│       │               │   ├── DBCollector.java   //重载DBParameterCollector里边的方法
│       │               │   ├── DBParameterCollector.java  //DBParameterCollector接口
│       │               │   ├── MySQLCollector.java   //收集mysql参数信息并存储到mysql中
│       │               │   ├── PostgresCollector.java //收集postgres参数信息并存储到mysql中
│       │               │   └── SAPHanaCollector.java   //收集SAPHana参数信息并存储到mysql
│       │               ├── ControllerConfiguration.java
│       │               ├── json_validation_schema
│       │               │   ├── config_schema.json
│       │               │   ├── schema.json
│       │               │   └── summary_schema.json
│       │               ├── Main.java
│       │               ├── ResultUploader.java
│       │               ├── types
│       │               │   ├── DatabaseType.java
│       │               │   └── JSONSchemaType.java
│       │               └── util
│       │                   ├── ClassUtil.java
│       │                   ├── CollectionUtil.java
│       │                   ├── FileUtil.java
│       │                   ├── json
│       │                   │   ├── JSONArray.java
│       │                   │   ├── JSONException.java
│       │                   │   ├── JSONObject.java
│       │                   │   ├── JSONStringer.java
│       │                   │   ├── JSONString.java
│       │                   │   ├── JSONTokener.java
│       │                   │   ├── JSONWriter.java
│       │                   │   └── Test.java
│       │                   ├── JSONSerializable.java
│       │                   ├── JSONUtil.java
│       │                   └── ValidationUtils.java
│       └── test
│           └── java
│               └── com
│                   └── controller
│                       └── collectors
│                           ├── AbstractJSONValidationTestCase.java
│                           ├── TestInvalidJSON.java
│                           ├── TestMySQLJSON.java
│                           └── TestPostgresJSON.java
└── driver
    ├── driver_config.json
    ├── fabfile.py
    ├── knobs
    │   └── postgres-96.json
    ├── LatencyUDF.py
    ├── lhs.py
    ├── lhs.sh
    ├── PostgresConf.py
    └── upload_batch.py

      1、控制器配置

       示例配置文件位于otertune/client/controller/config/目录下。需要更新文件中的信息。目前,不需要关心控制器配置文件中的upload_code和upload_url,因为驱动程序将处理上传结果到服务器。在驱动程序配置文件中进行设置,要指定控制器配置的路径,可能需要更改驱动程序配置中的controller_config。

     1)mysql信息(sample_mysql_config.json)如下:

{
  "database_type" : "mysql",
  "database_url" : "jdbc:mysql://localhost:3306/mysqldb",
  "username" : "MY_DATABASE_USERNAME",
  "password" : "MY_DATABASE_PASSWORD",
  "upload_code" : "DEPRECATED",
  "upload_url" : "DEPRECATED",
  "workload_name" : "workload_name"
}

    2)postgres配置信息(sample_postgres_config.json)如下:

{
  "database_type" : "postgres",
  "database_url" : "jdbc:postgresql://localhost:5432/postgres",
  "username" : "MY_DATABASE_USERNAME",
  "password" : "MY_DATABASE_PASSWORD",
  "upload_code" : "DEPRECATED",
  "upload_url" : "DEPRECATED",
  "workload_name" : "workload_name"
}

       2、驱动程序配置

      驱动程序配置文件位于ottertune/client/driver/driver_config.json。它包括数据库信息、OLTPBENCH信息和控制器信息。upload_url是ottertune服务器网站的url,upload_code在服务器网站的每个会话中都是唯一的。可以设置save_path为每个试验循环保存目标DBMS的收集信息。

{
  "database_type" : "postgres",
  "database_name" : "tpcc",
  "database_disk": "/dev/xvda1",
  "database_conf": "/etc/postgresql/9.6/main/postgresql.conf",
  "database_save_path": "/home/ubuntu/ottertune",
  "username" : "bohan",
  "password" : "bohan",
  "oltpbench_home": "/home/ubuntu/oltpbench",
  "oltpbench_config": "/home/ubuntu/oltpbench/config/tpcc_config_postgres.xml",
  "oltpbench_workload": "tpcc",
  "oltpbench_log" : "/home/ubuntu/ottertune/client/driver/oltp.log",
  "controller_config": "/home/ubuntu/ottertune/client/controller/config/sample_postgres_config.json",
  "controller_log" : "/home/ubuntu/ottertune/client/driver/controller.log",
  "save_path": "/home/ubuntu/results",
  "upload_url" : "http://127.0.0.1:8000",
  "upload_code" : "I5I10PXK3PK27FM86YYS",
  "lhs_knob_path" : "/home/ubuntu/ottertune/client/driver/knobs/postgres-96.json",
  "lhs_save_path" : "/home/ubuntu/ottertune/client/driver/configs"
}

      3、OLTP-Bench 配置

       目前,我们使用oltpbench在观察期间运行工作负载(默认为5分钟)。您可以更改OLTP-Bench配置以更新工作负荷信息。路径可以在驱动程序配置的oltpbench_config中指定。注意,如果在OLTP-Bench配置中增加了scale_factor or terminal,那么还应该增加数据库配置中的最大连接数。

       可以按照如下说明构建OLTP工作台并加载数据库。

ant
./oltpbenchmark -b tpcc -c config/tpcc_config_postgres.xml --create=true --load=true

  注:上面的命令运行ant时报错Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-8-openjdk-amd64/lib/tools.jar

      

    原因:java的默认jre选择错误 

    解决办法:root@instance-ehcsziev:/home/tangqing/oltpbench# sudo update-alternatives --config java

      

   输入数字选择:2,修改java默认的jre 

    继续执行:ant

      

    继续执行:

ant
./oltpbenchmark -b tpcc -c config/tpcc_config_postgres.xml --create=true --load=true

      

三、运行

      在设置了上述三种配置之后,您可以在上面的描述中运行循环。在每个循环中,它收集目标DBMS信息,上传到服务器,获取新的推荐配置,安装配置并重新启动DBMS。用户可以继续运行循环,直到对推荐的配置满意为止。函数在驱动程序文件otertune/client/driver/fabfile.py中定义。

      fab loop运行一个单循环。fab run_loops:max_iter=10运行10个循环。您可以设置最大迭代次数来更改最大迭代次数。

 

四、参考资料


     1、安装参考:https://github.com/cmu-db/ottertune/wiki/client-side

     2、关于OtterTune,请参阅相关或的

              代码:https://github.com/cmu-db/ottertune

              论文:http://db.cs.cmu.edu/papers/2017/tuning-sigmod2017.pdf

              官网:http://ottertune.cs.cmu.edu/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值