mysql-warmup 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +44 -0
- data/Rakefile +8 -0
- data/bin/console +17 -0
- data/bin/mysql-warmup +95 -0
- data/lib/mysql_warmup/index.rb +51 -0
- data/lib/mysql_warmup/logger.rb +9 -0
- data/lib/mysql_warmup/table.rb +34 -0
- data/lib/mysql_warmup/version.rb +3 -0
- data/lib/mysql_warmup/warmer.rb +95 -0
- data/lib/mysql_warmup.rb +7 -0
- data/mysql-warmup.gemspec +35 -0
- data/test/helper.rb +7 -0
- data/test/test_index.rb +20 -0
- data/test/test_logger.rb +13 -0
- data/test/test_mysql_warmup.rb +5 -0
- data/test/test_table.rb +14 -0
- data/test/test_warmer.rb +21 -0
- metadata +94 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ef5600e2b1d9462f2e8653caa0ae64a1e373ae4d
|
4
|
+
data.tar.gz: aa4a0595091db470b66d079784d4dacadded57ca
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ac489f240575c9f49f7e8bc4cb4217e899c29c2282eafffbfe1ad445085f03d806055e632ff204026acfaafdcbff2ebd33ac77e7949c7b99674df434ce789278
|
7
|
+
data.tar.gz: 9fcb4721c49c1a29a34e1e7349f4e066f4699a00b338041d924fb7dd9ec48ba5270f4baf25727344a2f8a5186300ae4ee39b9affe67e59552ca1c37cf6414873
|
data/README.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# mysql_warmup
|
2
|
+
Simple mysql-wamup command tool for warming up mysql server after create/reboot
|
3
|
+
[Github](https://github.com/manhdaovan/mysql_warmup)
|
4
|
+
|
5
|
+
# Background
|
6
|
+
With InnoDB storage engine, when you've just created new slave instance,
|
7
|
+
first requests to DB will be hit on disk instead of buffer poll. So, the requests will be slow down.
|
8
|
+
You can use this tool for warming up buffer poll before the first requests come.
|
9
|
+
[Detail](https://www.percona.com/blog/2008/05/01/quickly-preloading-innodb-tables-in-the-buffer-pool/)
|
10
|
+
|
11
|
+
# Usage
|
12
|
+
1. **When?**
|
13
|
+
* You've set up new slave instance (base on Master-Slave model)
|
14
|
+
* Your mysql version < 5.6, that not support [Saving and Restoring the Buffer Pool State](https://dev.mysql.com/doc/refman/5.6/en/innodb-preload-buffer-pool.html), and your mysql instance just reboot
|
15
|
+
* Your mysql version >= 5.6, but you not config [Saving and Restoring the Buffer Pool State](https://dev.mysql.com/doc/refman/5.6/en/innodb-preload-buffer-pool.html), and your mysql just reboot
|
16
|
+
2. **How?**
|
17
|
+
* Install this tool (please see `Install` section below)
|
18
|
+
* Usage as below syntax
|
19
|
+
|
20
|
+
```
|
21
|
+
Usage: mysql-warmup -h host-or-ip -u username <options>
|
22
|
+
|
23
|
+
Input options:
|
24
|
+
-h host : Host or ip of mysql instance
|
25
|
+
-u username : Username to access mysql instance
|
26
|
+
-d database : Database to warmup.
|
27
|
+
Default to all databases exclude information_schema, mysql, performance_schema, sys
|
28
|
+
-p port : Port to connect. Default to 3306
|
29
|
+
--help : Show help message
|
30
|
+
--version : Show mysql-warmup version
|
31
|
+
```
|
32
|
+
|
33
|
+
# Install
|
34
|
+
* Directly with command: `$gem install mysql-warmup`
|
35
|
+
|
36
|
+
* Or with `Gemfile` by adding line '`gem 'mysql-warmup`' to your `Gemfile` then `$bundle install`
|
37
|
+
|
38
|
+
# TODO
|
39
|
+
* RDoc
|
40
|
+
|
41
|
+
# Development
|
42
|
+
* All PR are welcome.
|
43
|
+
* Be sure all test cases are passed by command: `$rake test`
|
44
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- encoding : utf-8 -*-
|
3
|
+
$LOAD_PATH.unshift(File.expand_path('./../lib', File.dirname(__FILE__)))
|
4
|
+
# noinspection RubyResolve
|
5
|
+
require 'mysql_warmup'
|
6
|
+
require 'irb'
|
7
|
+
require 'pp'
|
8
|
+
|
9
|
+
if __FILE__ == $PROGRAM_NAME
|
10
|
+
IRB.start(__FILE__)
|
11
|
+
else # check -e option
|
12
|
+
if /\A-e\z/ =~ $PROGRAM_NAME
|
13
|
+
IRB.start(__FILE__)
|
14
|
+
else
|
15
|
+
IRB.setup(__FILE__)
|
16
|
+
end
|
17
|
+
end
|
data/bin/mysql-warmup
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift(File.expand_path('../lib', File.dirname(__FILE__)))
|
5
|
+
require 'mysql_warmup'
|
6
|
+
require 'optparse'
|
7
|
+
|
8
|
+
def print_help
|
9
|
+
puts "mysql-warmup, by ManhDV - version #{MysqlWarmup::VERSION}"
|
10
|
+
puts 'Website: https://github.com/manhdaovan/mysql_warmup'
|
11
|
+
puts
|
12
|
+
puts 'Usage: mysql-warmup -h host-or-ip -u username <options>'
|
13
|
+
puts
|
14
|
+
puts 'Input options:'
|
15
|
+
puts '-h host : Host or ip of mysql instance'
|
16
|
+
puts '-u username : Username to access mysql instance'
|
17
|
+
puts '-d database : Database to warmup.'
|
18
|
+
puts ' Default to all databases exclude information_schema, mysql, performance_schema, sys'
|
19
|
+
puts '-p port : Port to connect. Default to 3306'
|
20
|
+
puts '--help : Show help message'
|
21
|
+
puts '--version : Show mysql-warmup version'
|
22
|
+
end
|
23
|
+
|
24
|
+
def print_error(msg)
|
25
|
+
puts
|
26
|
+
puts ">>> ERROR: #{msg}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def params_valid?(options)
|
30
|
+
required_params = [:host, :username]
|
31
|
+
valid = true
|
32
|
+
required_params.each do |rp|
|
33
|
+
next unless options.fetch(rp, nil).nil?
|
34
|
+
print_error("Required #{rp}")
|
35
|
+
valid = false
|
36
|
+
end
|
37
|
+
valid
|
38
|
+
end
|
39
|
+
|
40
|
+
options = { show_version: false, help: false, port: 3306, database: 'all' }
|
41
|
+
|
42
|
+
begin
|
43
|
+
OptionParser.new do |opts|
|
44
|
+
opts.banner = 'Usage: mysql-warmup -h host-or-ip -u username <options>'
|
45
|
+
opts.on('-h host', String) do |h|
|
46
|
+
options[:host] = h
|
47
|
+
end
|
48
|
+
|
49
|
+
opts.on('-u username') do |u|
|
50
|
+
options[:username] = u
|
51
|
+
end
|
52
|
+
|
53
|
+
opts.on('-d database') do |d|
|
54
|
+
options[:database] = d
|
55
|
+
end
|
56
|
+
|
57
|
+
opts.on('-p port') do |p|
|
58
|
+
options[:port] = p
|
59
|
+
end
|
60
|
+
|
61
|
+
opts.on('--help') do |_|
|
62
|
+
options[:help] = true
|
63
|
+
end
|
64
|
+
|
65
|
+
opts.on('--version') do |_|
|
66
|
+
options[:show_version] = true
|
67
|
+
end
|
68
|
+
end.parse!
|
69
|
+
rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e
|
70
|
+
print_error(e.message)
|
71
|
+
print_help
|
72
|
+
exit(0)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Execute command base on input
|
76
|
+
if options[:show_version]
|
77
|
+
puts MysqlWarmup::VERSION
|
78
|
+
elsif options[:help]
|
79
|
+
print_help
|
80
|
+
elsif params_valid?(options)
|
81
|
+
puts
|
82
|
+
puts 'Input the mysql password:'
|
83
|
+
password = gets.chomp
|
84
|
+
begin
|
85
|
+
MysqlWarmup::Warmer.new(options[:host],
|
86
|
+
options[:username],
|
87
|
+
password,
|
88
|
+
options[:port].to_i,
|
89
|
+
options[:database]).warmup
|
90
|
+
rescue => e
|
91
|
+
print_error(e.message)
|
92
|
+
end
|
93
|
+
else
|
94
|
+
print_help
|
95
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module MysqlWarmup
|
2
|
+
class Index
|
3
|
+
QUERY_TEMPLATE = 'select %s from %s where %s'.freeze
|
4
|
+
attr_reader :query_string
|
5
|
+
|
6
|
+
def initialize(table_name, column_name, column_type, column_key)
|
7
|
+
@table_name = table_name
|
8
|
+
@column_name = column_name
|
9
|
+
@column_type = column_type
|
10
|
+
@column_key = column_key
|
11
|
+
@query_string = build_query_string(@table_name, @column_name,
|
12
|
+
@column_type, @column_key)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def build_query_string(table_name, column_name, column_type, column_key)
|
18
|
+
if type_primary?(column_key) && type_integer?(column_type)
|
19
|
+
format_query("sum(`#{table_name}`.`#{column_name}`)", "`#{table_name}`", '1')
|
20
|
+
elsif type_integer?(column_type)
|
21
|
+
format_query('count(*)', "`#{table_name}`", "`#{table_name}`.`#{column_name}` LIKE '%0%'")
|
22
|
+
elsif type_var_char?(column_type)
|
23
|
+
format_query('count(*)', "`#{table_name}`", "`#{table_name}`.`#{column_name}` LIKE '%0%'")
|
24
|
+
elsif type_blob?(column_type)
|
25
|
+
format_query('count(*)', "`#{table_name}`", "`#{table_name}`.`#{column_name}` LIKE '%0%'")
|
26
|
+
else
|
27
|
+
format_query('count(*)', "`#{table_name}`", "`#{table_name}`.`#{column_name}` LIKE '%0%'")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def type_primary?(column_key)
|
32
|
+
column_key.casecmp('PRI').zero?
|
33
|
+
end
|
34
|
+
|
35
|
+
def type_integer?(column_type)
|
36
|
+
!(column_type.downcase =~ /int/).nil?
|
37
|
+
end
|
38
|
+
|
39
|
+
def type_blob?(column_type)
|
40
|
+
!(column_type.downcase =~ /blob/).nil?
|
41
|
+
end
|
42
|
+
|
43
|
+
def type_var_char?(column_type)
|
44
|
+
!(column_type.downcase =~ /varchar|index/).nil?
|
45
|
+
end
|
46
|
+
|
47
|
+
def format_query(*params)
|
48
|
+
format(QUERY_TEMPLATE, *params)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module MysqlWarmup
|
2
|
+
class Table
|
3
|
+
DESC_TABLE_STRUCTURE = {
|
4
|
+
field: 0,
|
5
|
+
type: 1,
|
6
|
+
null: 2,
|
7
|
+
key: 3,
|
8
|
+
default: 4,
|
9
|
+
extra: 5
|
10
|
+
}.freeze
|
11
|
+
|
12
|
+
attr_reader :indexes
|
13
|
+
|
14
|
+
def initialize(table_name, field_infos)
|
15
|
+
@table_name = table_name
|
16
|
+
@field_infos = field_infos
|
17
|
+
@indexes = build_index
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def build_index
|
23
|
+
indexes_infos = @field_infos.select { |v| !v[DESC_TABLE_STRUCTURE[:key]].empty? }
|
24
|
+
indexes = []
|
25
|
+
indexes_infos.each do |index_info|
|
26
|
+
indexes << MysqlWarmup::Index.new(@table_name,
|
27
|
+
index_info[DESC_TABLE_STRUCTURE[:field]],
|
28
|
+
index_info[DESC_TABLE_STRUCTURE[:type]],
|
29
|
+
index_info[DESC_TABLE_STRUCTURE[:key]])
|
30
|
+
end
|
31
|
+
indexes
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'mysql'
|
2
|
+
module MysqlWarmup
|
3
|
+
class Warmer
|
4
|
+
ALL_DATABASE = 'all'.freeze
|
5
|
+
EXCLUDE_DATABASES = %w(information_schema mysql performance_schema sys).freeze
|
6
|
+
PREVENT_VARIABLES = [:@host, :@username, :@password, :@database, :@port].freeze
|
7
|
+
|
8
|
+
def initialize(host, username, password, port = 3306, database = 'all')
|
9
|
+
@host = host
|
10
|
+
@username = username
|
11
|
+
@password = password
|
12
|
+
@database = database
|
13
|
+
@port = port
|
14
|
+
|
15
|
+
@connector = if warmup_all?
|
16
|
+
Mysql.new(@host, @username, @password, '', @port)
|
17
|
+
else
|
18
|
+
Mysql.new(@host, @username, @password, @database, @port)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def warmup
|
23
|
+
warmup_all? ? warmup_all_dbs : warmup_only
|
24
|
+
end
|
25
|
+
|
26
|
+
# Prevent inspection object
|
27
|
+
def inspect
|
28
|
+
"#<MysqlWarmup::Warmer:#{object_id}>"
|
29
|
+
end
|
30
|
+
|
31
|
+
def instance_variable_get(*several_variants)
|
32
|
+
raise 'Not allow to view this variable' if PREVENT_VARIABLES.include?(several_variants[0])
|
33
|
+
super
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def warmup_all_dbs
|
39
|
+
@connector.list_dbs.each do |db|
|
40
|
+
next if EXCLUDE_DATABASES.include?(db)
|
41
|
+
MysqlWarmup::Warmer.new(@host, @username, @password, @port, db).warmup
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def warmup_only
|
46
|
+
write_log(">>>>>>> START WARMUP FOR DB: #{@database} <<<<<<")
|
47
|
+
tables = @connector.query('show tables')
|
48
|
+
table = tables.fetch_row
|
49
|
+
while table
|
50
|
+
# Fetch fields infos
|
51
|
+
fields_infos = fetch_fields_infos(table[0])
|
52
|
+
|
53
|
+
table_instance = MysqlWarmup::Table.new(table[0], fields_infos)
|
54
|
+
write_log("START WARMUP FOR TABLE: `#{@database}`.`#{table[0]}`")
|
55
|
+
table_instance.indexes.each do |i|
|
56
|
+
touch(i.query_string)
|
57
|
+
end
|
58
|
+
write_log("SUCCESS WARMUP FOR TABLE: `#{@database}`.`#{table[0]}`\n\n")
|
59
|
+
|
60
|
+
# Continue fetching table
|
61
|
+
table = tables.fetch_row
|
62
|
+
end
|
63
|
+
write_log("+++++++ SUCCESS WARMUP FOR DB: #{@database} +++++++\n\n")
|
64
|
+
rescue Mysql::Error => e
|
65
|
+
write_log("ERROR: ----------- #{e.message}")
|
66
|
+
write_log("BACKTRACE: ------- #{e.backtrace[0, 5]}")
|
67
|
+
ensure
|
68
|
+
@connector.close if @connector
|
69
|
+
end
|
70
|
+
|
71
|
+
def fetch_fields_infos(table_name)
|
72
|
+
fields_infos = []
|
73
|
+
fields = @connector.query("describe `#{table_name}`")
|
74
|
+
field = fields.fetch_row
|
75
|
+
while field
|
76
|
+
fields_infos << field
|
77
|
+
field = fields.fetch_row
|
78
|
+
end
|
79
|
+
fields_infos
|
80
|
+
end
|
81
|
+
|
82
|
+
def touch(query_string)
|
83
|
+
# write_log(query_string)
|
84
|
+
@connector.query(query_string)
|
85
|
+
end
|
86
|
+
|
87
|
+
def write_log(log_msg)
|
88
|
+
MysqlWarmup::Logger.write(log_msg)
|
89
|
+
end
|
90
|
+
|
91
|
+
def warmup_all?
|
92
|
+
@database.downcase == ALL_DATABASE
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
data/lib/mysql_warmup.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'mysql_warmup/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = 'mysql-warmup'
|
8
|
+
s.version = MysqlWarmup::VERSION
|
9
|
+
s.author = 'Manh Dao Van'
|
10
|
+
s.email = 'manhdaovan@gmail.com'
|
11
|
+
s.homepage = 'https://github.com/manhdaovan/mysql_warmup'
|
12
|
+
s.license = 'MIT'
|
13
|
+
|
14
|
+
s.summary = 'A command line tool to warm up mysql instance after reboot or startup'
|
15
|
+
s.description = <<-eos
|
16
|
+
When you've just created new slave instance, first requests to DB (with InnoDB storage engine)
|
17
|
+
will be hit on disk instead of buffer poll. So, the requests will be slow down.
|
18
|
+
You can use this tool for warming up buffer poll before the first requests come.
|
19
|
+
Please see document for other cases.
|
20
|
+
eos
|
21
|
+
|
22
|
+
s.platform = Gem::Platform::RUBY
|
23
|
+
s.required_ruby_version = '>= 2.0.0'
|
24
|
+
|
25
|
+
s.files = `git ls-files`.split("\n")
|
26
|
+
s.test_files = `git ls-files -- {test}/*`.split("\n")
|
27
|
+
s.require_paths = ['lib']
|
28
|
+
|
29
|
+
s.executables = s.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
30
|
+
s.default_executable = 'mysql-warmup'
|
31
|
+
s.bindir = 'bin'
|
32
|
+
|
33
|
+
s.add_dependency('mysql')
|
34
|
+
s.add_development_dependency('rake')
|
35
|
+
end
|
data/test/helper.rb
ADDED
data/test/test_index.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'mysql_warmup'
|
3
|
+
require 'helper'
|
4
|
+
|
5
|
+
class TestIndex < Test::Unit::TestCase
|
6
|
+
def test_query_string
|
7
|
+
types = %w(VARCHAR TEXT BLOB INT DATE OTHERS)
|
8
|
+
# Index for primary
|
9
|
+
index = MysqlWarmup::Index.new('table_name', 'col_name', 'INT', 'PRI')
|
10
|
+
assert_equal(build_query('sum(`table_name`.`col_name`)', '`table_name`', '1'),
|
11
|
+
index.query_string)
|
12
|
+
|
13
|
+
# Index for other fields
|
14
|
+
types.each do |type|
|
15
|
+
index = MysqlWarmup::Index.new('table_name', 'col_name', type, '')
|
16
|
+
assert_equal(build_query('count(*)', '`table_name`', "`table_name`.`col_name` LIKE '%0%'"),
|
17
|
+
index.query_string)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/test/test_logger.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'mysql_warmup'
|
3
|
+
|
4
|
+
class TestLogger < Test::Unit::TestCase
|
5
|
+
def test_logger_output
|
6
|
+
orig_stdout = $stdout
|
7
|
+
$stdout = StringIO.new
|
8
|
+
MysqlWarmup::Logger.write('log output')
|
9
|
+
assert_equal(true, !($stdout.string =~ /log output/).nil?)
|
10
|
+
ensure
|
11
|
+
$stdout = orig_stdout
|
12
|
+
end
|
13
|
+
end
|
data/test/test_table.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'mysql_warmup'
|
3
|
+
|
4
|
+
class TestTable < Test::Unit::TestCase
|
5
|
+
def test_indexes_of_table
|
6
|
+
table_name = 'table_name'
|
7
|
+
fields_info = [%w(field type null key default extra)] * 5
|
8
|
+
table = MysqlWarmup::Table.new(table_name, fields_info)
|
9
|
+
assert_equal(5, table.indexes.size)
|
10
|
+
table.indexes.each do |table_index|
|
11
|
+
assert_equal(true, table_index.is_a?(MysqlWarmup::Index))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/test/test_warmer.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'mysql_warmup'
|
3
|
+
|
4
|
+
class TestWarmer < Test::Unit::TestCase
|
5
|
+
def test_init_and_prevent_variable
|
6
|
+
Mysql.class_eval do
|
7
|
+
def self.new(*_arg)
|
8
|
+
'Mysql Instance'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
warmer = MysqlWarmup::Warmer.new('localhost', 'db_user', 'db_password')
|
12
|
+
MysqlWarmup::Warmer::PREVENT_VARIABLES.each do |p_v|
|
13
|
+
begin
|
14
|
+
warmer.instance_variable_get(p_v)
|
15
|
+
rescue => e
|
16
|
+
assert_equal('Not allow to view this variable', e.message)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
assert_equal('Mysql Instance', warmer.instance_variable_get(:@connector))
|
20
|
+
end
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mysql-warmup
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Manh Dao Van
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-01-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mysql
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: |2
|
42
|
+
When you've just created new slave instance, first requests to DB (with InnoDB storage engine)
|
43
|
+
will be hit on disk instead of buffer poll. So, the requests will be slow down.
|
44
|
+
You can use this tool for warming up buffer poll before the first requests come.
|
45
|
+
Please see document for other cases.
|
46
|
+
email: manhdaovan@gmail.com
|
47
|
+
executables:
|
48
|
+
- console
|
49
|
+
- mysql-warmup
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- README.md
|
54
|
+
- Rakefile
|
55
|
+
- bin/console
|
56
|
+
- bin/mysql-warmup
|
57
|
+
- lib/mysql_warmup.rb
|
58
|
+
- lib/mysql_warmup/index.rb
|
59
|
+
- lib/mysql_warmup/logger.rb
|
60
|
+
- lib/mysql_warmup/table.rb
|
61
|
+
- lib/mysql_warmup/version.rb
|
62
|
+
- lib/mysql_warmup/warmer.rb
|
63
|
+
- mysql-warmup.gemspec
|
64
|
+
- test/helper.rb
|
65
|
+
- test/test_index.rb
|
66
|
+
- test/test_logger.rb
|
67
|
+
- test/test_mysql_warmup.rb
|
68
|
+
- test/test_table.rb
|
69
|
+
- test/test_warmer.rb
|
70
|
+
homepage: https://github.com/manhdaovan/mysql_warmup
|
71
|
+
licenses:
|
72
|
+
- MIT
|
73
|
+
metadata: {}
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.0.0
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 2.6.8
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: A command line tool to warm up mysql instance after reboot or startup
|
94
|
+
test_files: []
|