Class: MysqlCacheManager::InnodbBufferPool

Inherits:
Object
  • Object
show all
Defined in:
lib/mysql_cache_manager/innodb_buffer_pool.rb

Constant Summary collapse

QUERY_STATUS =
<<-EOQ
  SELECT * FROM information_schema.global_status
  WHERE variable_name LIKE 'INNODB\\_%'
EOQ
QUERY_PAGES =
<<-EOQ
  SELECT space, page_number
  FROM information_schema.innodb_buffer_page
  WHERE page_type IN ("INDEX")
EOQ

Instance Method Summary collapse

Constructor Details

#initialize(mysql) ⇒ InnodbBufferPool

Returns a new instance of InnodbBufferPool.



14
15
16
# File 'lib/mysql_cache_manager/innodb_buffer_pool.rb', line 14

def initialize(mysql)
  @mysql = mysql
end

Instance Method Details

#each_pageObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/mysql_cache_manager/innodb_buffer_pool.rb', line 28

def each_page
  unless block_given?
    return Enumerable::Enumerator.new(self, :each_page)
  end

  pages = 0
  pages_result = @mysql.query(QUERY_PAGES)
  pages_result.each_hash do |row|
    pages += 1
    if 0 == (pages % 1000)
      puts "Fetched #{pages} pages so far..."
    end
    yield row["space"].to_i, row["page_number"].to_i
  end

  pages
end

#fetch_page(space, pages) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/mysql_cache_manager/innodb_buffer_pool.rb', line 46

def fetch_page(space, pages)
  unless pages.is_a? Array
    pages = [pages]
  end
  fetch_query = "SELECT engine_control(innodb, prefetch_pages, #{space}, #{pages.join(',')}) AS pages_fetched"
  if result = @mysql.query(fetch_query)
    if status_row = result.fetch_hash
      return status_row["pages_fetched"].to_i
    end
  end
  nil
end

#statusObject



18
19
20
21
22
23
24
25
26
# File 'lib/mysql_cache_manager/innodb_buffer_pool.rb', line 18

def status
  status_result = @mysql.query(QUERY_STATUS)
  status_vars = {}
  status_result.each_hash do |row|
    var = row['VARIABLE_NAME'].sub("INNODB_", "").downcase
    status_vars[var] = row['VARIABLE_VALUE'].to_i
  end
  status_vars
end