RDBMS サンプルデータ生成 Get Started

RDBMS サンプルデータ生成 Get Started

MySQL

  • 1 Sakilaデータベース

    • MySQL側の準備

      • RDSでは、SYSアクセス(SUPER権限)は提供されていません。

      • 自動バックアップ有効時にバイナリログも有効になっているが、この状況でトリガーを作成すると、以下のエラーが返されます。そのため、log_bin_trust_function_creatorsのパラメータを有効にしておく

        • ERROR 1419 (HY000) at line 214: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

    • 以下を実行。すると、sakilaというデータベースが作成され、複数のサンプルデータを挿入できる。

      $ mysql -h xxxxxxxxxx.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u hayashier -p < <( \
          wget 'http://downloads.mysql.com/docs/sakila-db.zip' \
          && unzip -o sakila-db.zip 1>/dev/null \
          && cat sakila-db/sakila-schema.sql sakila-db/sakila-data.sql \
        )
    • 以下のようなテーブルが確認できます。

      mysql> use sakila;
      mysql> show tables;
      +----------------------------+
      | Tables_in_sakila           |
      +----------------------------+
      | actor                      |
      | actor_info                 |
      | address                    |
      | category                   |
      | city                       |
      | country                    |
      | customer                   |
      | customer_list              |
      | film                       |
      | film_actor                 |
      | film_category              |
      | film_list                  |
      | film_text                  |
      | inventory                  |
      | language                   |
      | nicer_but_slower_film_list |
      | payment                    |
      | rental                     |
      | sales_by_film_category     |
      | sales_by_store             |
      | staff                      |
      | staff_list                 |
      | store                      |
      +----------------------------+
      23 rows in set (0.00 sec)
  • 2 sysbench

    • データベース作成

      CREATE DATABASE sbtest;
    • sysbenchインストール

      # Build Requirements, for RHEL/CentOS/Amazon Linux AMI
      $ sudo yum -y install make automake libtool pkgconfig libaio-devel
      # For MySQL support, replace with mysql-devel on RHEL/CentOS 5
      $ sudo yum -y install mariadb-devel openssl-devel
      # For PostgreSQL support
      $ sudo yum -y install postgresql-devel
      # For sysbench RPM
      $ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
      $ sudo yum -y install sysbench
    • sysbench実行

      • データ生成という点では最初のコマンドの実行のみでOKです。sbtest1というテーブルを作成されます。2つめはベンチマークを取るときのコマンド実行例です。

        • MySQL

          # Generate data
          $ sysbench --db-driver=mysql --table-size=10000000 --mysql-host=xxxxxxxxxx.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com --mysql-user=hayashier --mysql-password=Test1234 --mysql-db=sbtest oltp_read_write prepare
          # Run benchmark
          $ sysbench --db-driver=mysql --mysql-host=xxxxxxxxxx.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com --mysql-user=hayashier --mysql-password=Test1234 --mysql-db=sbtest --threads=32 --time=1800 oltp_read_write run
        • PostgreSQL

          # Generate data
          $ sysbench --db-driver=pgsql --table-size=10000000 --pgsql-host=xxxxxxxxxx.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com --pgsql-user=hayashier --pgsql-password=Test1234 --pgsql-db=sbtest oltp_read_write prepare
          # Run benchmark
          $ sysbench --db-driver=pgsql --pgsql-host=xxxxxxxxxx.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com --pgsql-user=hayashier --pgsql-password=Test1234 --pgsql-db=sbtest --threads=32 --time=1800 oltp_read_write run
  • Others

    • 3 小さめのデータ

      create database test;
      use test;
      create table t1 (id int primary key);
      insert into t1 values (1), (22), (333);
      select * from t1;
    • 4 小さめのデータ

      use test;
      create table t1 (id int not null, text varchar(32));
      insert into t1 values (1, 'a');
      insert into t1 values (2, 'b');
      insert into t1 values (3, 'c');
      insert into t1 values (4, 'd');
      insert into t1 values (5, 'e');
      select * from t1;
    • 5 大きめのデータ

      use test;
      create table bigtable (id int not null, text varchar(600));
      insert into bigtable (id, text) values (1, 'J04...8kB59');
      insert into bigtable (id,text) select 0,text from bigtable;
      insert into bigtable (id,text) select 0,text from bigtable;
      insert into bigtable (id,text) select 0,text from bigtable;
      insert into bigtable (id,text) select 0,text from bigtable;
      insert into bigtable (id,text) select 0,text from bigtable;
      insert into bigtable (id,text) select 0,text from bigtable;
      insert into bigtable (id,text) select 0,text from bigtable;
      insert into bigtable (id,text) select 0,text from bigtable;
      insert into bigtable (id,text) select 0,text from bigtable;
      insert into bigtable (id,text) select 0,text from bigtable;
      insert into bigtable (id,text) select 0,text from bigtable;
      insert into bigtable (id,text) select 0,text from bigtable;
    • 6 大きめのデータ

      use test;
      create table bigtable_inc (id int not null AUTO_INCREMENT, text varchar(600), PRIMARY KEY (id));
      insert into bigtable_inc (id, text) values (1, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
      insert into bigtable_inc (text) select text from bigtable_inc;
    • 7

      set global tmp_table_size = 268435456;
      set global max_heap_table_size = 268435456;
      create table table1 (id int primary key auto_increment, s1 varchar(32), s2 varchar(32));
      insert into pstest.table1 values (null, md5(rand()), md5(rand()));
      insert into pstest.table1 select null, md5(rand()), md5(rand()) from pstest.table1;
      :
      truncate table performance_schema.memory_summary_global_by_event_name;
    • 8

      use test;
      create table randint (id int not null AUTO_INCREMENT, num BIGINT, text varchar(600), PRIMARY KEY (id));
      insert into randint (id, num, text) values (1, FLOOR(RAND() * 10000000000000000), 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
      insert into randint (num, text) select FLOOR(RAND() * 10000000000000000), text from randint;
      insert into randint (num, text) select FLOOR(RAND() * 10000000000000000), text from randint;
      insert into randint (num, text) select FLOOR(RAND() * 10000000000000000), text from randint;
      insert into randint (num, text) select FLOOR(RAND() * 10000000000000000), text from randint;
      insert into randint (num, text) select FLOOR(RAND() * 10000000000000000), text from randint;
      insert into randint (num, text) select FLOOR(RAND() * 10000000000000000), text from randint;
      insert into randint (num, text) select FLOOR(RAND() * 10000000000000000), text from randint;
      insert into randint (num, text) select FLOOR(RAND() * 10000000000000000), text from randint;
      insert into randint (num, text) select FLOOR(RAND() * 10000000000000000), text from randint;
      insert into randint (num, text) select FLOOR(RAND() * 10000000000000000), text from randint;
      insert into randint (num, text) select FLOOR(RAND() * 10000000000000000), text from randint;
      insert into randint (num, text) select FLOOR(RAND() * 10000000000000000), text from randint;
    • 9 値にちょっとしたバラエティを作る版

      CREATE TABLE item (
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(10),
        description VARCHAR(30),
        price INT UNSIGNED,
        created_at DATETIME
      );
      
      
      INSERT INTO item () VALUES ();
      INSERT INTO item (id) SELECT 0 FROM item;
      INSERT INTO item (id) SELECT 0 FROM item;
      INSERT INTO item (id) SELECT 0 FROM item;
      INSERT INTO item (id) SELECT 0 FROM item;
      INSERT INTO item (id) SELECT 0 FROM item;
      INSERT INTO item (id) SELECT 0 FROM item;
      
      UPDATE item SET
        name = CONCAT('item-', id),
        description = SUBSTRING(MD5(RAND()), 1, 30),
        price = CEIL(RAND() * 10000),
        created_at = ADDTIME(CONCAT_WS(' ','2017-01-01' + INTERVAL RAND() * 180 DAY, '00:00:00'), SEC_TO_TIME(FLOOR(0 + (RAND() * 86401))));
    • 10 ストアドプロシージャを利用した版

      CREATE TABLE t1 (id int, score int);
      
      delimiter //
      CREATE PROCEDURE insert_random_data()
      BEGIN
          SET @limit = 20;
          SET @pos = 0;
          WHILE @limit > @pos DO
              insert into t1 values 
              (FLOOR(RAND() * 100000), FLOOR(RAND() * 100000)), 
                  (FLOOR(RAND() * 100000), FLOOR(RAND() * 100000)),
                  (FLOOR(RAND() * 100000), FLOOR(RAND() * 100000)),
                  (FLOOR(RAND() * 100000), FLOOR(RAND() * 100000)),
                  (FLOOR(RAND() * 100000), FLOOR(RAND() * 100000));
              SET @pos = @pos + 1;
          END WHILE;
      END
      //
      delimiter ;
      
      CALL insert_random_data();
      
      DROP PROCEDURE insert_random_data;

PostgreSQL

  • 1 PostgreSQLのチュートリアルのデータベース

    • データベース作成

    • pg_restoreコマンドを実行

      • RDSにはsuperuserの権限がないため、--no-ownerオプションを指定しないと、ERROR: role "postgres" does not existのようなエラーが出て実行できません。

    • 以下のようなテーブルが確認できます。

  • 2 sysbench

    • MySQLの項を参照

  • 3

Oracle

  • with SQL*Plus

SQL Server

  • AdventureWorksのデータセットを利用。ローカルの場合は、データの復元で、対象のファイルを指定することで復元できるが、RDSの場合は、S3にファイルを配置し、RDS用に用意されたストアドプロシージャを実行する必要がある。

    • リストア

    • 進捗確認

Notes

Last updated