innodb_ruby 0.9.10 → 0.9.11
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/innodb_space +49 -1
- data/lib/innodb/system.rb +12 -0
- data/lib/innodb/undo_record.rb +48 -0
- data/lib/innodb/version.rb +1 -1
- metadata +2 -2
data/bin/innodb_space
CHANGED
@@ -1031,11 +1031,44 @@ def index_level_summary(index, level)
|
|
1031
1031
|
page.record_space,
|
1032
1032
|
page.free_space,
|
1033
1033
|
page.records,
|
1034
|
-
page.
|
1034
|
+
page.min_record.key_string,
|
1035
1035
|
]
|
1036
1036
|
end
|
1037
1037
|
end
|
1038
1038
|
|
1039
|
+
def undo_history_summary(innodb_system)
|
1040
|
+
history = innodb_system.history.each_history_list
|
1041
|
+
history_list = history.select { |history| history.list.length > 0 }
|
1042
|
+
|
1043
|
+
puts "%-8s%-8s%-14s%-20s%s" % [
|
1044
|
+
"Page",
|
1045
|
+
"Offset",
|
1046
|
+
"Transaction",
|
1047
|
+
"Type",
|
1048
|
+
"Table",
|
1049
|
+
]
|
1050
|
+
|
1051
|
+
history_list.each do |history|
|
1052
|
+
history.each_undo_record do |undo|
|
1053
|
+
table_name = innodb_system.table_name_by_id(undo.table_id)
|
1054
|
+
puts "%-8s%-8s%-14s%-20s%s" % [
|
1055
|
+
undo.page,
|
1056
|
+
undo.offset,
|
1057
|
+
undo.trx_id,
|
1058
|
+
undo.type,
|
1059
|
+
table_name,
|
1060
|
+
]
|
1061
|
+
end
|
1062
|
+
end
|
1063
|
+
end
|
1064
|
+
|
1065
|
+
def undo_record_dump(innodb_system, page, record_offset)
|
1066
|
+
undo_record = Innodb::UndoRecord.new(page, record_offset)
|
1067
|
+
index = innodb_system.clustered_index_by_table_id(undo_record.table_id)
|
1068
|
+
undo_record.index_page = index.root
|
1069
|
+
undo_record.new_subordinate(page, record_offset).dump
|
1070
|
+
end
|
1071
|
+
|
1039
1072
|
def usage(exit_code, message = nil)
|
1040
1073
|
if message
|
1041
1074
|
puts "Error: #{message}; see --help for usage information\n\n"
|
@@ -1225,6 +1258,13 @@ The following modes are supported:
|
|
1225
1258
|
Summarize the history (undo logs) for a record. A record offset must be
|
1226
1259
|
provided with -R/--record.
|
1227
1260
|
|
1261
|
+
undo-history-summary
|
1262
|
+
Summarize all records in the history list (undo logs).
|
1263
|
+
|
1264
|
+
undo-record-dump
|
1265
|
+
Dump a detailed description of an undo record and the data it contains.
|
1266
|
+
A record offset must be provided with -R/--record.
|
1267
|
+
|
1228
1268
|
END_OF_USAGE
|
1229
1269
|
|
1230
1270
|
exit exit_code
|
@@ -1375,6 +1415,10 @@ if /-list-iterate$/.match(mode) and !@options.list
|
|
1375
1415
|
usage 1, "List name must be specified using -L/--list"
|
1376
1416
|
end
|
1377
1417
|
|
1418
|
+
if /-level-/.match(mode) and !@options.level
|
1419
|
+
usage 1, "Level must be specified using -l/--level"
|
1420
|
+
end
|
1421
|
+
|
1378
1422
|
if [
|
1379
1423
|
"index-recurse",
|
1380
1424
|
"index-record-offsets",
|
@@ -1460,6 +1504,10 @@ when "record-dump"
|
|
1460
1504
|
record_dump(page, @options.record)
|
1461
1505
|
when "record-history"
|
1462
1506
|
record_history(page, @options.record)
|
1507
|
+
when "undo-history-summary"
|
1508
|
+
undo_history_summary(innodb_system)
|
1509
|
+
when "undo-record-dump"
|
1510
|
+
undo_record_dump(innodb_system, page, @options.record)
|
1463
1511
|
else
|
1464
1512
|
usage 1, "Unknown mode: #{mode}"
|
1465
1513
|
end
|
data/lib/innodb/system.rb
CHANGED
@@ -175,6 +175,11 @@ class Innodb::System
|
|
175
175
|
end
|
176
176
|
end
|
177
177
|
|
178
|
+
# Return the clustered index name given a table name.
|
179
|
+
def clustered_index_by_table_name(table_name)
|
180
|
+
data_dictionary.clustered_index_name_by_table_name(table_name)
|
181
|
+
end
|
182
|
+
|
178
183
|
# Return an array of the table name and index name given an index ID.
|
179
184
|
def table_and_index_name_by_id(index_id)
|
180
185
|
if dd_index = data_dictionary.data_dictionary_index_ids[index_id]
|
@@ -198,6 +203,13 @@ class Innodb::System
|
|
198
203
|
index
|
199
204
|
end
|
200
205
|
|
206
|
+
# Return the clustered index given a table ID.
|
207
|
+
def clustered_index_by_table_id(table_id)
|
208
|
+
if table_name = table_name_by_id(table_id)
|
209
|
+
index_by_name(table_name, clustered_index_by_table_name(table_name))
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
201
213
|
def history
|
202
214
|
Innodb::History.new(self)
|
203
215
|
end
|
data/lib/innodb/undo_record.rb
CHANGED
@@ -205,6 +205,14 @@ class Innodb::UndoRecord
|
|
205
205
|
undo_record[:key]
|
206
206
|
end
|
207
207
|
|
208
|
+
def page
|
209
|
+
undo_record[:page]
|
210
|
+
end
|
211
|
+
|
212
|
+
def offset
|
213
|
+
undo_record[:offset]
|
214
|
+
end
|
215
|
+
|
208
216
|
def key_string
|
209
217
|
key && key.map { |r| "%s=%s" % [r[:name], r[:value].inspect] }.join(", ")
|
210
218
|
end
|
@@ -256,4 +264,44 @@ class Innodb::UndoRecord
|
|
256
264
|
older_undo_record
|
257
265
|
end
|
258
266
|
|
267
|
+
def dump
|
268
|
+
puts "Undo record at offset %i" % offset
|
269
|
+
puts
|
270
|
+
|
271
|
+
puts "Header:"
|
272
|
+
puts " %-25s: %i" % ["Previous record offset", header[:prev]]
|
273
|
+
puts " %-25s: %i" % ["Next record offset", header[:next]]
|
274
|
+
puts " %-25s: %s" % ["Type", header[:type]]
|
275
|
+
puts
|
276
|
+
|
277
|
+
puts "System fields:"
|
278
|
+
puts " Transaction ID: %s" % trx_id
|
279
|
+
puts " Roll Pointer:"
|
280
|
+
puts " Undo Log: page %i, offset %i" % [
|
281
|
+
roll_ptr[:undo_log][:page],
|
282
|
+
roll_ptr[:undo_log][:offset],
|
283
|
+
]
|
284
|
+
puts " Rollback Segment ID: %i" % roll_ptr[:rseg_id]
|
285
|
+
puts
|
286
|
+
|
287
|
+
puts "Key fields:"
|
288
|
+
key.each do |field|
|
289
|
+
puts " %s: %s" % [
|
290
|
+
field[:name],
|
291
|
+
field[:value].inspect,
|
292
|
+
]
|
293
|
+
end
|
294
|
+
puts
|
295
|
+
|
296
|
+
puts "Non-key fields:"
|
297
|
+
row.each do |field|
|
298
|
+
next if !field
|
299
|
+
puts " %s: %s" % [
|
300
|
+
field[:name],
|
301
|
+
field[:value].inspect,
|
302
|
+
]
|
303
|
+
end
|
304
|
+
puts
|
305
|
+
end
|
306
|
+
|
259
307
|
end
|
data/lib/innodb/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: innodb_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-09-
|
13
|
+
date: 2014-09-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bindata
|