【機器學習化DBMS】——ottertune客戶端部署安裝

一、準備工作

     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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章