]> git.pld-linux.org Git - packages/mysql.git/blame - mysql-innodb_check_fragmentation.patch
- fix bison/yacc related build problems
[packages/mysql.git] / mysql-innodb_check_fragmentation.patch
CommitLineData
36400f81 1diff -ruN a/innobase/btr/btr0cur.c b/innobase/btr/btr0cur.c
eccb488f
ER
2--- a/innobase/btr/btr0cur.c Mon Dec 22 00:33:03 2008 -0800
3+++ b/innobase/btr/btr0cur.c Mon Dec 22 00:33:11 2008 -0800
4@@ -516,6 +516,14 @@
5 == index->table->comp);
6 }
7
8+ if (level == 0) {
9+ /* Initializes status counters */
10+ innobase_mysql_thd_init_innodb_scan_cont();
11+ innobase_mysql_thd_init_innodb_scan_jump();
12+ innobase_mysql_thd_init_innodb_scan_data();
13+ innobase_mysql_thd_init_innodb_scan_garbage();
14+ }
15+
16 break;
17 }
18
36400f81 19@@ -664,6 +672,12 @@
eccb488f
ER
20 root_height);
21 }
36400f81 22
eccb488f
ER
23+ /* Initializes status counters */
24+ innobase_mysql_thd_init_innodb_scan_cont();
25+ innobase_mysql_thd_init_innodb_scan_jump();
26+ innobase_mysql_thd_init_innodb_scan_data();
27+ innobase_mysql_thd_init_innodb_scan_garbage();
36400f81 28+
eccb488f
ER
29 break;
30 }
36400f81
ER
31
32diff -ruN a/innobase/btr/btr0pcur.c b/innobase/btr/btr0pcur.c
eccb488f
ER
33--- a/innobase/btr/btr0pcur.c Mon Dec 22 00:33:03 2008 -0800
34+++ b/innobase/btr/btr0pcur.c Mon Dec 22 00:33:11 2008 -0800
35@@ -381,6 +381,7 @@
36 last record of the current page */
37 mtr_t* mtr) /* in: mtr */
38 {
39+ ulint page_no;
40 ulint next_page_no;
41 ulint space;
42 page_t* page;
36400f81 43@@ -393,12 +394,23 @@
eccb488f
ER
44 cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
45
46 page = btr_pcur_get_page(cursor);
47+ page_no = buf_frame_get_page_no(page);
48
49 next_page_no = btr_page_get_next(page, mtr);
50 space = buf_frame_get_space_id(page);
51
52 ut_ad(next_page_no != FIL_NULL);
36400f81 53
eccb488f
ER
54+ if (next_page_no - page_no == 1) {
55+ innobase_mysql_thd_increment_innodb_scan_cont(1);
56+ } else {
57+ innobase_mysql_thd_increment_innodb_scan_jump(1);
58+ }
59+ innobase_mysql_thd_increment_innodb_scan_data(
60+ page_get_data_size(page));
61+ innobase_mysql_thd_increment_innodb_scan_garbage(
62+ page_header_get_field(page, PAGE_GARBAGE));
36400f81 63+
eccb488f
ER
64 next_page = btr_page_get(space, next_page_no, cursor->latch_mode, mtr);
65 ut_a(page_is_comp(next_page) == page_is_comp(page));
36400f81 66 buf_block_align(next_page)->check_index_page_at_flush = TRUE;
eccb488f
ER
67@@ -427,6 +439,7 @@
68 record of the current page */
69 mtr_t* mtr) /* in: mtr */
70 {
71+ ulint page_no;
72 ulint prev_page_no;
73 ulint space;
74 page_t* page;
36400f81 75@@ -462,10 +475,21 @@
eccb488f
ER
76 btr_pcur_restore_position(latch_mode2, cursor, mtr);
77
78 page = btr_pcur_get_page(cursor);
79+ page_no = buf_frame_get_page_no(page);
80
81 prev_page_no = btr_page_get_prev(page, mtr);
82 space = buf_frame_get_space_id(page);
36400f81 83
eccb488f
ER
84+ if (page_no - prev_page_no == 1) {
85+ innobase_mysql_thd_increment_innodb_scan_cont(1);
86+ } else {
87+ innobase_mysql_thd_increment_innodb_scan_jump(1);
88+ }
89+ innobase_mysql_thd_increment_innodb_scan_data(
90+ page_get_data_size(page));
91+ innobase_mysql_thd_increment_innodb_scan_garbage(
92+ page_header_get_field(page, PAGE_GARBAGE));
36400f81 93+
eccb488f
ER
94 if (btr_pcur_is_before_first_on_page(cursor, mtr)
95 && (prev_page_no != FIL_NULL)) {
36400f81
ER
96
97diff -ruN a/innobase/btr/btr0sea.c b/innobase/btr/btr0sea.c
eccb488f
ER
98--- a/innobase/btr/btr0sea.c Mon Dec 22 00:33:03 2008 -0800
99+++ b/innobase/btr/btr0sea.c Mon Dec 22 00:33:11 2008 -0800
36400f81 100@@ -888,6 +888,12 @@
eccb488f
ER
101
102 buf_pool->n_page_gets++;
103
104+ /* Initializes status counters */
105+ innobase_mysql_thd_init_innodb_scan_cont();
106+ innobase_mysql_thd_init_innodb_scan_jump();
107+ innobase_mysql_thd_init_innodb_scan_data();
108+ innobase_mysql_thd_init_innodb_scan_garbage();
109+
110 return(TRUE);
111
112 /*-------------------------------------------*/
36400f81 113diff -ruN a/innobase/include/btr0cur.h b/innobase/include/btr0cur.h
eccb488f
ER
114--- a/innobase/include/btr0cur.h Mon Dec 22 00:33:03 2008 -0800
115+++ b/innobase/include/btr0cur.h Mon Dec 22 00:33:11 2008 -0800
116@@ -697,6 +697,17 @@
117 extern ulint btr_cur_n_non_sea_old;
118 extern ulint btr_cur_n_sea_old;
119
120+/*--------------------------------------*/
121+/* prototypes for new functions added to ha_innodb.cc */
122+void innobase_mysql_thd_init_innodb_scan_cont();
123+void innobase_mysql_thd_increment_innodb_scan_cont(ulong length);
124+void innobase_mysql_thd_init_innodb_scan_jump();
125+void innobase_mysql_thd_increment_innodb_scan_jump(ulong length);
126+void innobase_mysql_thd_init_innodb_scan_data();
127+void innobase_mysql_thd_increment_innodb_scan_data(ulong length);
128+void innobase_mysql_thd_init_innodb_scan_garbage();
129+void innobase_mysql_thd_increment_innodb_scan_garbage(ulong length);
130+
131 #ifndef UNIV_NONINL
132 #include "btr0cur.ic"
133 #endif
36400f81 134diff -ruN /dev/null b/patch_info/innodb_check_fragmentation.info
eccb488f
ER
135--- /dev/null Thu Jan 01 00:00:00 1970 +0000
136+++ b/patch_info/innodb_check_fragmentation.info Mon Dec 22 00:33:11 2008 -0800
137@@ -0,0 +1,6 @@
138+File=innodb_check_fragmentation.patch
139+Name=Session status to check fragmentation of the last InnoDB scan
140+Version=1.0
141+Author=Percona <info@percona.com>
142+License=GPL
143+Comment=The names are Innodb_scan_*
36400f81 144diff -ruN a/sql/ha_innodb.cc b/sql/ha_innodb.cc
eccb488f
ER
145--- a/sql/ha_innodb.cc Mon Dec 22 00:33:03 2008 -0800
146+++ b/sql/ha_innodb.cc Mon Dec 22 00:33:11 2008 -0800
36400f81 147@@ -759,6 +759,102 @@
eccb488f
ER
148 }
149
150 /*************************************************************************
151+Initializes Innodb_scan_blocks_contiguous. */
152+extern "C"
153+void
154+innobase_mysql_thd_init_innodb_scan_cont()
155+{
156+ THD *thd=current_thd;
157+ if (likely(thd != 0)) {
158+ thd->status_var.innodb_scan_cont = 0;
159+ }
160+}
161+
162+/*************************************************************************
163+Increments Innodb_scan_blocks_contiguous. */
164+extern "C"
165+void
166+innobase_mysql_thd_increment_innodb_scan_cont(ulong length)
167+{
168+ THD *thd=current_thd;
169+ if (likely(thd != 0)) {
170+ thd->status_var.innodb_scan_cont+= length;
171+ }
172+}
173+
174+/*************************************************************************
175+Initializes Innodb_scan_blocks_jumpy. */
176+extern "C"
177+void
178+innobase_mysql_thd_init_innodb_scan_jump()
179+{
180+ THD *thd=current_thd;
181+ if (likely(thd != 0)) {
182+ thd->status_var.innodb_scan_jump = 0;
183+ }
184+}
185+
186+/*************************************************************************
187+Increments Innodb_scan_blocks_jumpy. */
188+extern "C"
189+void
190+innobase_mysql_thd_increment_innodb_scan_jump(ulong length)
191+{
192+ THD *thd=current_thd;
193+ if (likely(thd != 0)) {
194+ thd->status_var.innodb_scan_jump+= length;
195+ }
196+}
197+
198+/*************************************************************************
199+Initializes Innodb_scan_data_in_pages. */
200+extern "C"
201+void
202+innobase_mysql_thd_init_innodb_scan_data()
203+{
204+ THD *thd=current_thd;
205+ if (likely(thd != 0)) {
206+ thd->status_var.innodb_scan_data = 0;
207+ }
208+}
209+
210+/*************************************************************************
211+Increments Innodb_scan_data_in_pages. */
212+extern "C"
213+void
214+innobase_mysql_thd_increment_innodb_scan_data(ulong length)
215+{
216+ THD *thd=current_thd;
217+ if (likely(thd != 0)) {
218+ thd->status_var.innodb_scan_data+= length;
219+ }
220+}
221+
222+/*************************************************************************
223+Initializes Innodb_scan_garbages_in_pages. */
224+extern "C"
225+void
226+innobase_mysql_thd_init_innodb_scan_garbage()
227+{
228+ THD *thd=current_thd;
229+ if (likely(thd != 0)) {
230+ thd->status_var.innodb_scan_garbage = 0;
231+ }
232+}
233+
234+/*************************************************************************
235+Increments Innodb_scan_garbages_in_pages. */
236+extern "C"
237+void
238+innobase_mysql_thd_increment_innodb_scan_garbage(ulong length)
239+{
240+ THD *thd=current_thd;
241+ if (likely(thd != 0)) {
242+ thd->status_var.innodb_scan_garbage+= length;
243+ }
244+}
245+
246+/*************************************************************************
247 Gets the InnoDB transaction handle for a MySQL handler object, creates
248 an InnoDB transaction struct if the corresponding MySQL thread struct still
249 lacks one. */
36400f81 250diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
eccb488f
ER
251--- a/sql/mysqld.cc Mon Dec 22 00:33:03 2008 -0800
252+++ b/sql/mysqld.cc Mon Dec 22 00:33:11 2008 -0800
36400f81 253@@ -6777,6 +6777,10 @@
eccb488f
ER
254 {"Handler_write", (char*) offsetof(STATUS_VAR, ha_write_count), SHOW_LONG_STATUS},
255 #ifdef HAVE_INNOBASE_DB
256 {"Innodb_", (char*) &innodb_status_variables, SHOW_VARS},
257+ {"Innodb_scan_pages_contiguous",(char*) offsetof(STATUS_VAR, innodb_scan_cont), SHOW_LONGLONG_STATUS},
258+ {"Innodb_scan_pages_jumpy", (char*) offsetof(STATUS_VAR, innodb_scan_jump), SHOW_LONGLONG_STATUS},
259+ {"Innodb_scan_data_in_pages",(char*) offsetof(STATUS_VAR, innodb_scan_data), SHOW_LONGLONG_STATUS},
260+ {"Innodb_scan_garbages_in_pages",(char*) offsetof(STATUS_VAR, innodb_scan_garbage), SHOW_LONGLONG_STATUS},
261 #endif /*HAVE_INNOBASE_DB*/
262 {"Key_blocks_not_flushed", (char*) &dflt_key_cache_var.global_blocks_changed, SHOW_KEY_CACHE_LONG},
263 {"Key_blocks_unused", (char*) &dflt_key_cache_var.blocks_unused, SHOW_KEY_CACHE_CONST_LONG},
36400f81 264diff -ruN a/sql/sql_class.h b/sql/sql_class.h
eccb488f
ER
265--- a/sql/sql_class.h Mon Dec 22 00:33:03 2008 -0800
266+++ b/sql/sql_class.h Mon Dec 22 00:33:11 2008 -0800
36400f81 267@@ -694,6 +694,10 @@
eccb488f
ER
268 sense to add to the /global/ status variable counter.
269 */
270 double last_query_cost;
271+ ulonglong innodb_scan_cont;
272+ ulonglong innodb_scan_jump;
273+ ulonglong innodb_scan_data;
274+ ulonglong innodb_scan_garbage;
275 } STATUS_VAR;
276
277 /*
This page took 0.064085 seconds and 4 git commands to generate.