已开启
dbmind 的xtuner子功能中的recommend运行模式推荐结果新增一列:参数的当前值 #152
AtomGit-Bot创建于 2023年8月3日
dbmind 的xtuner子功能中的recommend运行模式推荐结果新增一列:参数的当前值 #152
已开启
AtomGit-Bot创建于 2023年8月3日
从refs/pull/152/head合入到master
共 3 个文件变更+49-8
@@ -302,7 +302,7 @@ class DriverBundle:
302 )302 )
303 discovered = set()303 discovered = set()
304 for dbname in all_db_list:304 for dbname in all_db_list:
305- if dbname in ('template0', 'template1'): # Skip these useless databases.305+ if dbname[0] in ('template0', 'template1'): # Skip these useless databases.
306 continue306 continue
307 discovered.add(dbname[0])307 discovered.add(dbname[0])
308 308 
@@ -51,12 +51,13 @@ class RecommendedKnobs:
51 print(construct_dividing_line('Recommended Knob Settings', padding='*'))51 print(construct_dividing_line('Recommended Knob Settings', padding='*'))
52 52 
53 knob_table = PrettyTable()53 knob_table = PrettyTable()
54- knob_table.field_names = ['name', 'recommend', 'min', 'max', 'restart']54+ knob_table.field_names = ['name', 'recommend', 'min', 'max', 'current', 'restart']
55 55 
56 for knob in self.all_knobs:56 for knob in self.all_knobs:
57- knob_table.add_row(57+ if knob.recommend != knob.current_value: # Only parameters whose recommended value differs from the current value are displayed.
58- (knob.name, knob.recommend, knob.min, knob.max, knob.restart)58+ knob_table.add_row(
59- )59+ (knob.name, knob.recommend, knob.min, knob.max, knob.current_value, knob.restart)
60+ )
60 print(knob_table)61 print(knob_table)
61 62 
62 def dump(self, fp, dump_report_knobs=True):63 def dump(self, fp, dump_report_knobs=True):
@@ -116,6 +117,8 @@ class Knob:
116 original: Str type. A setting value from `pg_settings` or user's configuration.117 original: Str type. A setting value from `pg_settings` or user's configuration.
117 min: Optional. Int, float type.118 min: Optional. Int, float type.
118 max: Optional. Int, float type.119 max: Optional. Int, float type.
120+ current_value: Optional. Int, float type.
121+ current: Optional. Int, float type.
119 type: String type. Constrained by Knob.TYPE.122 type: String type. Constrained by Knob.TYPE.
120 restart: Boolean type.123 restart: Boolean type.
121 124 
@@ -126,6 +129,7 @@ class Knob:
126 self.recommend = kwargs.get('recommend')129 self.recommend = kwargs.get('recommend')
127 self.original = self.current = None130 self.original = self.current = None
128 self.user_set = kwargs.get('default')131 self.user_set = kwargs.get('default')
132+ self.current_value = kwargs.get('current')
129 self._min = kwargs.get('min')133 self._min = kwargs.get('min')
130 self._max = kwargs.get('max')134 self._max = kwargs.get('max')
131 self.type = kwargs.get('type')135 self.type = kwargs.get('type')
@@ -140,7 +144,6 @@ class Knob:
140 144 
141 if str in (type(self._min), type(self._max)):145 if str in (type(self._min), type(self._max)):
142 raise ValueError("'min', and 'max' fields of knob should not be str type.")146 raise ValueError("'min', and 'max' fields of knob should not be str type.")
143- 
144 # Refresh scale.147 # Refresh scale.
145 self._scale = None148 self._scale = None
146 self.fresh_scale()149 self.fresh_scale()
@@ -226,6 +229,7 @@ class Knob:
226 'restart': self.restart,229 'restart': self.restart,
227 'default': self.user_set if self.user_set is not None else self.original,230 'default': self.user_set if self.user_set is not None else self.original,
228 'recommend': self.to_string(self.current),231 'recommend': self.to_string(self.current),
232+ 'current_value': self.to_string(self.current_value),
229 'min': self._min,233 'min': self._min,
230 'max': self._max234 'max': self._max
231 }}235 }}
@@ -32,19 +32,22 @@ def round4(v):
32 return int(v + (4 - v % 4))32 return int(v + (4 - v % 4))
33 33 
34 34 
35-def instantiate_knob(name, recommend, knob_type, value_min=0, value_max=1, restart=False):35+def instantiate_knob(name, recommend, knob_type, current, value_min=0, value_max=1, restart=False):
36 if knob_type not in Knob.TYPE.ITEMS:36 if knob_type not in Knob.TYPE.ITEMS:
37 raise TypeError("The type of parameter 'knob_type' is incorrect.")37 raise TypeError("The type of parameter 'knob_type' is incorrect.")
38 38 
39 if knob_type == Knob.TYPE.INT:39 if knob_type == Knob.TYPE.INT:
40 recommend = int(recommend)40 recommend = int(recommend)
41+ current = int(current)
41 value_max = int(value_max)42 value_max = int(value_max)
42 value_min = int(value_min)43 value_min = int(value_min)
43 elif knob_type == Knob.TYPE.FLOAT:44 elif knob_type == Knob.TYPE.FLOAT:
44 recommend = float(recommend)45 recommend = float(recommend)
46+ current = float(current)
45 value_max = float(value_max)47 value_max = float(value_max)
46 value_min = float(value_min)48 value_min = float(value_min)
47 elif knob_type == Knob.TYPE.BOOL:49 elif knob_type == Knob.TYPE.BOOL:
50+ current_value_type = type(current)
48 value_type = type(recommend)51 value_type = type(recommend)
49 if value_type is bool:52 if value_type is bool:
50 recommend = 1 if recommend else 053 recommend = 1 if recommend else 0
@@ -54,12 +57,22 @@ def instantiate_knob(name, recommend, knob_type, value_min=0, value_max=1, resta
54 pass57 pass
55 else:58 else:
56 raise ValueError59 raise ValueError
57- 60+ # Convert the current value to the same type as the recommended value.
61+ if current_value_type is bool:
62+ current = 1 if current else 0
63+ elif current_value_type is str and current_value_type in ('on', 'off'):
64+ current = 1 if current == 'on' else 0
65+ elif current_value_type is int:
66+ pass
67+ else:
68+ raise ValueError
69+
58 value_max = 170 value_max = 1
59 value_min = 071 value_min = 0
60 72 
61 return Knob(name,73 return Knob(name,
62 recommend=recommend,74 recommend=recommend,
75+ current=current,
63 min=value_min,76 min=value_min,
64 max=value_max,77 max=value_max,
65 type=knob_type,78 type=knob_type,
@@ -202,6 +215,7 @@ class OpenGaussKnobAdvisor:
202 return instantiate_knob(name="max_process_memory",215 return instantiate_knob(name="max_process_memory",
203 recommend=suitable_mem,216 recommend=suitable_mem,
204 knob_type=Knob.TYPE.INT,217 knob_type=Knob.TYPE.INT,
218+ current=self.metric["max_process_memory"] * self.metric.block_size,
205 value_max=suitable_mem,219 value_max=suitable_mem,
206 value_min=min_mem,220 value_min=min_mem,
207 restart=True)221 restart=True)
@@ -257,6 +271,7 @@ class OpenGaussKnobAdvisor:
257 return instantiate_knob(name="max_connections",271 return instantiate_knob(name="max_connections",
258 recommend=recommend,272 recommend=recommend,
259 knob_type=Knob.TYPE.INT,273 knob_type=Knob.TYPE.INT,
274+ current=self.metric["max_connections"],
260 value_max=upper,275 value_max=upper,
261 value_min=lower,276 value_min=lower,
262 restart=True)277 restart=True)
@@ -279,6 +294,7 @@ class OpenGaussKnobAdvisor:
279 return instantiate_knob(name="max_connections",294 return instantiate_knob(name="max_connections",
280 recommend=recommend,295 recommend=recommend,
281 knob_type=Knob.TYPE.INT,296 knob_type=Knob.TYPE.INT,
297+ current=self.metric["max_connections"],
282 value_max=recommend * 2,298 value_max=recommend * 2,
283 value_min=lower,299 value_min=lower,
284 restart=True)300 restart=True)
@@ -305,6 +321,7 @@ class OpenGaussKnobAdvisor:
305 return instantiate_knob(name="max_prepared_transactions",321 return instantiate_knob(name="max_prepared_transactions",
306 recommend=max_conn.recommend,322 recommend=max_conn.recommend,
307 knob_type=Knob.TYPE.INT,323 knob_type=Knob.TYPE.INT,
324+ current=max_pt,
308 value_max=max_conn.max,325 value_max=max_conn.max,
309 value_min=max_conn.min,326 value_min=max_conn.min,
310 restart=True)327 restart=True)
@@ -340,6 +357,7 @@ class OpenGaussKnobAdvisor:
340 return instantiate_knob(name="shared_buffers",357 return instantiate_knob(name="shared_buffers",
341 recommend=recommend,358 recommend=recommend,
342 knob_type=Knob.TYPE.INT,359 knob_type=Knob.TYPE.INT,
360+ current=self.metric["shared_buffers"] * self.metric.block_size,
343 value_max=upper,361 value_max=upper,
344 value_min=lower,362 value_min=lower,
345 restart=True)363 restart=True)
@@ -350,6 +368,7 @@ class OpenGaussKnobAdvisor:
350 return instantiate_knob(name="shared_buffers",368 return instantiate_knob(name="shared_buffers",
351 recommend=recommend,369 recommend=recommend,
352 knob_type=Knob.TYPE.INT,370 knob_type=Knob.TYPE.INT,
371+ current=self.metric["shared_buffers"] * self.metric.block_size,
353 value_max=max(upper, lower),372 value_max=max(upper, lower),
354 value_min=lower,373 value_min=lower,
355 restart=True)374 restart=True)
@@ -379,6 +398,7 @@ class OpenGaussKnobAdvisor:
379 return instantiate_knob(name="work_mem",398 return instantiate_knob(name="work_mem",
380 recommend=recommend,399 recommend=recommend,
381 knob_type=Knob.TYPE.INT,400 knob_type=Knob.TYPE.INT,
401+ current=self.metric["work_mem"],
382 value_max=upper,402 value_max=upper,
383 value_min=lower,403 value_min=lower,
384 restart=False)404 restart=False)
@@ -389,6 +409,7 @@ class OpenGaussKnobAdvisor:
389 return instantiate_knob(name="work_mem",409 return instantiate_knob(name="work_mem",
390 recommend=recommend,410 recommend=recommend,
391 knob_type=Knob.TYPE.INT,411 knob_type=Knob.TYPE.INT,
412+ current=self.metric["work_mem"],
392 value_max=upper,413 value_max=upper,
393 value_min=lower,414 value_min=lower,
394 restart=False)415 restart=False)
@@ -398,6 +419,7 @@ class OpenGaussKnobAdvisor:
398 return instantiate_knob(name="maintenance_work_mem",419 return instantiate_knob(name="maintenance_work_mem",
399 recommend=self.work_mem.recommend * 10,420 recommend=self.work_mem.recommend * 10,
400 knob_type=Knob.TYPE.INT,421 knob_type=Knob.TYPE.INT,
422+ current=self.metric["maintenance_work_mem"],
401 value_max=self.work_mem.recommend * 20,423 value_max=self.work_mem.recommend * 20,
402 value_min=self.work_mem.recommend,424 value_min=self.work_mem.recommend,
403 restart=False)425 restart=False)
@@ -411,6 +433,7 @@ class OpenGaussKnobAdvisor:
411 return instantiate_knob(name="effective_cache_size",433 return instantiate_knob(name="effective_cache_size",
412 recommend=lower,434 recommend=lower,
413 knob_type=Knob.TYPE.INT,435 knob_type=Knob.TYPE.INT,
436+ current=self.metric["effective_cache_size"] * self.metric.block_size,
414 value_max=upper,437 value_max=upper,
415 value_min=lower,438 value_min=lower,
416 restart=False)439 restart=False)
@@ -418,6 +441,7 @@ class OpenGaussKnobAdvisor:
418 return instantiate_knob(name="effective_cache_size",441 return instantiate_knob(name="effective_cache_size",
419 recommend=upper,442 recommend=upper,
420 knob_type=Knob.TYPE.INT,443 knob_type=Knob.TYPE.INT,
444+ current=self.metric["effective_cache_size"] * self.metric.block_size,
421 value_max=upper,445 value_max=upper,
422 value_min=lower,446 value_min=lower,
423 restart=False)447 restart=False)
@@ -431,6 +455,7 @@ class OpenGaussKnobAdvisor:
431 return instantiate_knob(name="effective_io_concurrency",455 return instantiate_knob(name="effective_io_concurrency",
432 recommend=2,456 recommend=2,
433 knob_type=Knob.TYPE.INT,457 knob_type=Knob.TYPE.INT,
458+ current=self.metric["effective_io_concurrency"],
434 value_max=4,459 value_max=4,
435 value_min=0,460 value_min=0,
436 restart=False)461 restart=False)
@@ -438,6 +463,7 @@ class OpenGaussKnobAdvisor:
438 return instantiate_knob(name="effective_io_concurrency",463 return instantiate_knob(name="effective_io_concurrency",
439 recommend=200,464 recommend=200,
440 knob_type=Knob.TYPE.INT,465 knob_type=Knob.TYPE.INT,
466+ current=self.metric["effective_io_concurrency"],
441 value_max=250,467 value_max=250,
442 value_min=150,468 value_min=150,
443 restart=False)469 restart=False)
@@ -459,6 +485,7 @@ class OpenGaussKnobAdvisor:
459 return instantiate_knob(name="wal_buffers",485 return instantiate_knob(name="wal_buffers",
460 recommend=self.shared_buffers.recommend * 1 / 32,486 recommend=self.shared_buffers.recommend * 1 / 32,
461 knob_type=Knob.TYPE.INT,487 knob_type=Knob.TYPE.INT,
488+ current=self.metric["wal_buffers"] * self.metric.block_size,
462 value_max=max(self.shared_buffers.recommend * 1 / 32, blocks_16m),489 value_max=max(self.shared_buffers.recommend * 1 / 32, blocks_16m),
463 value_min=min(self.shared_buffers.recommend * 1 / 64, blocks_16m),490 value_min=min(self.shared_buffers.recommend * 1 / 64, blocks_16m),
464 restart=True)491 restart=True)
@@ -472,6 +499,7 @@ class OpenGaussKnobAdvisor:
472 return instantiate_knob(name="wal_buffers",499 return instantiate_knob(name="wal_buffers",
473 recommend=self.shared_buffers.recommend * 1 / 32,500 recommend=self.shared_buffers.recommend * 1 / 32,
474 knob_type=Knob.TYPE.INT,501 knob_type=Knob.TYPE.INT,
502+ current=self.metric["wal_buffers"],
475 value_max=self.shared_buffers.recommend * 1 / 32,503 value_max=self.shared_buffers.recommend * 1 / 32,
476 value_min=blocks_16m,504 value_min=blocks_16m,
477 restart=True)505 restart=True)
@@ -479,6 +507,7 @@ class OpenGaussKnobAdvisor:
479 return instantiate_knob(name="wal_buffers",507 return instantiate_knob(name="wal_buffers",
480 recommend=-1,508 recommend=-1,
481 knob_type=Knob.TYPE.INT,509 knob_type=Knob.TYPE.INT,
510+ current=self.metric["wal_buffers"] * self.metric.block_size,
482 value_max=-1,511 value_max=-1,
483 value_min=-1,512 value_min=-1,
484 restart=True)513 restart=True)
@@ -491,6 +520,7 @@ class OpenGaussKnobAdvisor:
491 return instantiate_knob(name="random_page_cost",520 return instantiate_knob(name="random_page_cost",
492 recommend=3,521 recommend=3,
493 knob_type=Knob.TYPE.FLOAT,522 knob_type=Knob.TYPE.FLOAT,
523+ current=self.metric["random_page_cost"],
494 value_max=4,524 value_max=4,
495 value_min=2,525 value_min=2,
496 restart=False)526 restart=False)
@@ -498,6 +528,7 @@ class OpenGaussKnobAdvisor:
498 return instantiate_knob(name="random_page_cost",528 return instantiate_knob(name="random_page_cost",
499 recommend=1,529 recommend=1,
500 knob_type=Knob.TYPE.FLOAT,530 knob_type=Knob.TYPE.FLOAT,
531+ current=self.metric["random_page_cost"],
501 value_max=2,532 value_max=2,
502 value_min=1,533 value_min=1,
503 restart=False)534 restart=False)
@@ -530,6 +561,7 @@ class OpenGaussKnobAdvisor:
530 return instantiate_knob(name="default_statistics_target",561 return instantiate_knob(name="default_statistics_target",
531 recommend=recommend,562 recommend=recommend,
532 knob_type=Knob.TYPE.INT,563 knob_type=Knob.TYPE.INT,
564+ current=self.metric["default_statistics_target"],
533 value_max=1000,565 value_max=1000,
534 value_min=50,566 value_min=50,
535 restart=False)567 restart=False)
@@ -546,6 +578,7 @@ class OpenGaussKnobAdvisor:
546 return instantiate_knob(name="default_statistics_target",578 return instantiate_knob(name="default_statistics_target",
547 recommend=recommend,579 recommend=recommend,
548 knob_type=Knob.TYPE.INT,580 knob_type=Knob.TYPE.INT,
581+ current=self.metric["default_statistics_target"],
549 value_max=150,582 value_max=150,
550 value_min=10,583 value_min=10,
551 restart=False)584 restart=False)
@@ -553,6 +586,7 @@ class OpenGaussKnobAdvisor:
553 return instantiate_knob(name="default_statistics_target",586 return instantiate_knob(name="default_statistics_target",
554 recommend=100,587 recommend=100,
555 knob_type=Knob.TYPE.INT,588 knob_type=Knob.TYPE.INT,
589+ current=self.metric["default_statistics_target"],
556 value_max=300,590 value_max=300,
557 value_min=80,591 value_min=80,
558 restart=False)592 restart=False)
@@ -565,6 +599,7 @@ class OpenGaussKnobAdvisor:
565 return instantiate_knob(name="enable_nestloop",599 return instantiate_knob(name="enable_nestloop",
566 recommend=0,600 recommend=0,
567 knob_type=Knob.TYPE.BOOL,601 knob_type=Knob.TYPE.BOOL,
602+ current=self.metric["enable_nestloop"],
568 value_max=1,603 value_max=1,
569 value_min=0,604 value_min=0,
570 restart=False)605 restart=False)
@@ -577,6 +612,7 @@ class OpenGaussKnobAdvisor:
577 return instantiate_knob(name="enable_mergejoin",612 return instantiate_knob(name="enable_mergejoin",
578 recommend=0,613 recommend=0,
579 knob_type=Knob.TYPE.BOOL,614 knob_type=Knob.TYPE.BOOL,
615+ current=self.metric["enable_mergejoin"],
580 value_max=1,616 value_max=1,
581 value_min=0,617 value_min=0,
582 restart=False)618 restart=False)
@@ -589,6 +625,7 @@ class OpenGaussKnobAdvisor:
589 return instantiate_knob(name="enable_hashjoin",625 return instantiate_knob(name="enable_hashjoin",
590 recommend=1,626 recommend=1,
591 knob_type=Knob.TYPE.BOOL,627 knob_type=Knob.TYPE.BOOL,
628+ current=self.metric["enable_hashjoin"],
592 value_max=1,629 value_max=1,
593 value_min=0,630 value_min=0,
594 restart=False)631 restart=False)