address dana's comment
This commit is contained in:
		
							parent
							
								
									e7d5b0338a
								
							
						
					
					
						commit
						77eb5cdb42
					
				|  | @ -4,6 +4,8 @@ | |||
| # Copyright (c) 2017-18, Carnegie Mellon University Database Group | ||||
| # | ||||
| 
 | ||||
| from website.types import DBMSType | ||||
| 
 | ||||
| # These parameters are not specified for any session, so they can only be set here | ||||
| 
 | ||||
| # If this flag is set, we check if celery is running, and restart celery if it is not. | ||||
|  | @ -26,4 +28,7 @@ KNOB_IDENT_USE_PRUNED_METRICS = False | |||
| MIN_WORKLOAD_RESULTS_COUNT = 5 | ||||
| 
 | ||||
| # The views used for metrics pruning | ||||
| VIEWS_FOR_PRUNING = ['dba_hist_osstat', 'dba_hist_sysstat', 'dba_hist_system_event'] | ||||
| VIEWS_FOR_PRUNING = { | ||||
|     DBMSType.ORACLE: ['dba_hist_osstat', 'dba_hist_sysstat', 'dba_hist_system_event', | ||||
|                       'dba_workload_replays', 'dba_hist_sys_time_model'], | ||||
| } | ||||
|  |  | |||
|  | @ -82,6 +82,8 @@ def run_background_tasks(): | |||
|             # Check that there are enough results in the workload | ||||
|             LOG.info("Not enough results in workload %s (# results: %s, # required: %s).", | ||||
|                      workload_name, num_wkld_results, MIN_WORKLOAD_RESULTS_COUNT) | ||||
|             workload.status = WorkloadStatusType.PROCESSED | ||||
|             workload.save() | ||||
|             continue | ||||
| 
 | ||||
|         LOG.info("Aggregating data for workload %s...", workload_name) | ||||
|  | @ -95,6 +97,16 @@ def run_background_tasks(): | |||
|                   metric_data['data'].shape) | ||||
|         LOG.info("Done aggregating data for workload %s.", workload_name) | ||||
| 
 | ||||
|         num_valid_results = knob_data['data'].shape[0]  # pylint: disable=unsubscriptable-object | ||||
|         if num_valid_results < MIN_WORKLOAD_RESULTS_COUNT: | ||||
|             # Check that there are enough valid results in the workload | ||||
|             LOG.info("Not enough valid results in workload %s (# valid results: " | ||||
|                      "%s, # required: %s).", workload_name, num_valid_results, | ||||
|                      MIN_WORKLOAD_RESULTS_COUNT) | ||||
|             workload.status = WorkloadStatusType.PROCESSED | ||||
|             workload.save() | ||||
|             continue | ||||
| 
 | ||||
|         # Knob_data and metric_data are 2D numpy arrays. Convert them into a | ||||
|         # JSON-friendly (nested) lists and then save them as new PipelineData | ||||
|         # objects. | ||||
|  | @ -122,7 +134,7 @@ def run_background_tasks(): | |||
|         # pruned metrics for this workload and save them in a new PipelineData | ||||
|         # object. | ||||
|         LOG.info("Pruning metrics for workload %s...", workload_name) | ||||
|         pruned_metrics = run_workload_characterization(metric_data=metric_data) | ||||
|         pruned_metrics = run_workload_characterization(metric_data=metric_data, dbms=workload.dbms) | ||||
|         LOG.info("Done pruning metrics for workload %s (# pruned metrics: %s).\n\n" | ||||
|                  "Pruned metrics: %s\n", workload_name, len(pruned_metrics), | ||||
|                  pruned_metrics) | ||||
|  | @ -240,7 +252,7 @@ def aggregate_data(wkld_results): | |||
|     return knob_data, metric_data | ||||
| 
 | ||||
| 
 | ||||
| def run_workload_characterization(metric_data): | ||||
| def run_workload_characterization(metric_data, dbms): | ||||
|     # Performs workload characterization on the metric_data and returns | ||||
|     # a set of pruned metrics. | ||||
|     # | ||||
|  | @ -255,13 +267,17 @@ def run_workload_characterization(metric_data): | |||
|     matrix = metric_data['data'] | ||||
|     columnlabels = metric_data['columnlabels'] | ||||
|     LOG.debug("Workload characterization ~ initial data size: %s", matrix.shape) | ||||
| 
 | ||||
|     views = VIEWS_FOR_PRUNING.get(dbms.type, None) | ||||
|     if views is not None: | ||||
|         useful_labels = [] | ||||
|         for label in columnlabels: | ||||
|         for view in VIEWS_FOR_PRUNING: | ||||
|             for view in views: | ||||
|                 if view in label: | ||||
|                     useful_labels.append(label) | ||||
|                     break | ||||
|     matrix, columnlabels = DataUtil.clean_metric_data(matrix, columnlabels, None, useful_labels) | ||||
|         matrix, columnlabels = DataUtil.clean_metric_data(matrix, columnlabels, None, | ||||
|                                                           useful_labels) | ||||
|         LOG.debug("Workload characterization ~ cleaned data size: %s", matrix.shape) | ||||
| 
 | ||||
|     # Bin each column (metric) in the matrix by its decile | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue