0

小さな OpenVZ コンテナーがあります。2 コアと 4096MB RAM。

私はmysqlデータベースを持っています(全体のサイズは80MBのInnoDbです)

INSERT ON DUPLICATE KEY UPDATE のようなクエリを 100 回実行すると、常に 1 秒より長く実行されるクエリはほとんどありません。

mysql> SHOW PROFILE;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| checking permissions | 0.000040 |
| creating table       | 0.000056 |
| After create         | 0.011363 |
| query end            | 1.231525 |
| freeing items        | 0.000089 |
| logging slow query   | 0.000019 |
| cleaning up          | 0.000005 |
+----------------------+----------+
7 rows in set (0.00 sec)

バイナリログをオフにすると、役に立ちました。したがって、問題はハードドライブにある可能性があります。また、クエリの実行中にバイナリ ログを書き込んでいるときに発生します。

mysql を tarantool に置き換えると役に立ちますか? 私が知っているように、tarantool は binlog も書き込みます。

私はpercona mysqlを持っています

mysql> select version();
+-----------------+
| version()       |
+-----------------+
| 5.6.25-73.1-log |
+-----------------+
1 row in set (0.01 sec)

ここに my.cnf があります

[client]
default-character-set = utf8mb4
[mysql]

# CLIENT #
port                           = 3306
socket                         = /var/lib/mysql/mysql.sock
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# GENERAL #
user                           = mysql
default-storage-engine         = InnoDB
socket                         = /var/lib/mysql/mysql.sock
pid-file                       = /var/lib/mysql/mysql.pid

# MyISAM #
key-buffer-size                = 32M
myisam-recover                 = FORCE,BACKUP

# SAFETY #
max-allowed-packet             = 16M
max-connect-errors             = 1000000

# DATA STORAGE #
datadir                        = /var/lib/mysql/

# BINARY LOGGING #
#log-bin                        = /var/lib/mysql/mysql-bin
#expire-logs-days               = 14
#sync-binlog                    = 1

# CACHES AND LIMITS #
tmp-table-size                 = 128M
max-heap-table-size            = 128M
query-cache-type               = 1
query-cache-size               = 32M
max-connections                = 1000
thread-cache-size              = 128
open-files-limit               = 65535
table-definition-cache         = 1024
table-open-cache               = 2048

# INNODB #
innodb-flush-method            = O_DIRECT
innodb-log-files-in-group      = 2
innodb-log-file-size           = 256M
innodb_log_buffer_size         = 32M
innodb-flush-log-at-trx-commit = 0
innodb-file-per-table          = 1
innodb-buffer-pool-size        = 1G
innodb_buffer_pool_instances   = 1

# LOGGING #
log-error                      = /var/lib/mysql/mysql-error1.log
log-queries-not-using-indexes  = 1
slow-query-log                 = 1
slow-query-log-file            = /var/lib/mysql/mysql-slow.log
long_query_time                = 1
log-queries-not-using-indexes  = 1
#PERCONA
log_slow_verbosity = microtime,query_plan,innodb
4

2 に答える 2

0

はい Tarantool write 'binlogs' (WAL - write-ahead logging)。

確かに tarantool は mysql よりも高速です。しかし、おそらく mysql にはさらに調整が必要です。申し訳ありませんが、mysql のチューニングについてはよくわかりません。

于 2016-03-23T11:22:20.143 に答える
0

タランツールがここであなたを助けてくれるはずです。

トランザクション ログがオンになっている場合でも、0.001 秒未満のレイテンシを実現します。重い読み取り/書き込みワークロードの下で Tarantool をテストするのに役立つコードは次のとおりです: https://gist.github.com/danikin/a5ddc6fe0cedc6257853

于 2016-03-23T11:24:58.573 に答える