### 27.4.7 Pre-Filtering by Consumer

 The [`setup_consumers`](performance-schema-setup-consumers-table.html) table lists the available consumer types and which are enabled:

```
mysql> SELECT * FROM performance_schema.setup_consumers;
+----------------------------------+---------+
| NAME                             | ENABLED |
+----------------------------------+---------+
| events_stages_current            | NO      |
| events_stages_history            | NO      |
| events_stages_history_long       | NO      |
| events_statements_cpu            | NO      |
| events_statements_current        | YES     |
| events_statements_history        | YES     |
| events_statements_history_long   | NO      |
| events_transactions_current      | YES     |
| events_transactions_history      | YES     |
| events_transactions_history_long | NO      |
| events_waits_current             | NO      |
| events_waits_history             | NO      |
| events_waits_history_long        | NO      |
| global_instrumentation           | YES     |
| thread_instrumentation           | YES     |
| statements_digest                | YES     |
+----------------------------------+---------+
```

 Modify the [`setup_consumers`](performance-schema-setup-consumers-table.html) table to affect pre-filtering at the consumer stage and determine the destinations to which events are sent. To enable or disable a consumer, set its `ENABLED` value to `YES` or `NO`.

 Modifications to the [`setup_consumers`](performance-schema-setup-consumers-table.html) table affect monitoring immediately.

 If you disable a consumer, the server does not spend time maintaining destinations for that consumer. For example, if you do not care about historical event information, disable the history consumers:

```
UPDATE performance_schema.setup_consumers
SET ENABLED = 'NO'
WHERE NAME LIKE '%history%';
```

 The consumer settings in the [`setup_consumers`](performance-schema-setup-consumers-table.html) table form a hierarchy from higher levels to lower. The following principles apply:

* Destinations associated with a consumer receive no events unless the Performance Schema checks the consumer and the consumer is enabled.

* A consumer is checked only if all consumers it depends on (if any) are enabled.

* If a consumer is not checked, or is checked but is disabled, other consumers that depend on it are not checked.

* Dependent consumers may have their own dependent consumers.

* If an event would not be sent to any destination, the Performance Schema does not produce it.

 The following lists describe the available consumer values. For discussion of several representative consumer configurations and their effect on instrumentation, see [Section 27.4.8, “Example Consumer Configurations”](performance-schema-consumer-configurations.html).

* [Global and Thread Consumers](performance-schema-consumer-filtering.html#performance-schema-consumer-filtering-global-thread)

* [Wait Event Consumers](performance-schema-consumer-filtering.html#performance-schema-consumer-filtering-wait-event)

* [Stage Event Consumers](performance-schema-consumer-filtering.html#performance-schema-consumer-filtering-stage-event)

* [Statement Event Consumers](performance-schema-consumer-filtering.html#performance-schema-consumer-filtering-statement-event)

* [Transaction Event Consumers](performance-schema-consumer-filtering.html#performance-schema-consumer-filtering-transaction-event)

* [Statement Digest Consumer](performance-schema-consumer-filtering.html#performance-schema-consumer-filtering-statement-digest)

#### Global and Thread Consumers

* `global_instrumentation` is the highest level consumer. If `global_instrumentation` is `NO`, it disables global instrumentation. All other settings are lower level and are not checked; it does not matter what they are set to. No global or per thread information is maintained and no individual events are collected in the current-events or event-history tables. If `global_instrumentation` is `YES`, the Performance Schema maintains information for global states and also checks the `thread_instrumentation` consumer.

* `thread_instrumentation` is checked only if `global_instrumentation` is `YES`. Otherwise, if `thread_instrumentation` is `NO`, it disables thread-specific instrumentation and all lower-level settings are ignored. No information is maintained per thread and no individual events are collected in the current-events or event-history tables. If `thread_instrumentation` is `YES`, the Performance Schema maintains thread-specific information and also checks `events_*`xxx`*_current` consumers.

#### Wait Event Consumers

 These consumers require both `global_instrumentation` and `thread_instrumentation` to be `YES` or they are not checked. If checked, they act as follows:

* `events_waits_current`, if `NO`, disables collection of individual wait events in the [`events_waits_current`](performance-schema-events-waits-current-table.html) table. If `YES`, it enables wait event collection and the Performance Schema checks the `events_waits_history` and `events_waits_history_long` consumers.

* `events_waits_history` is not checked if `event_waits_current` is `NO`. Otherwise, an `events_waits_history` value of `NO` or `YES` disables or enables collection of wait events in the [`events_waits_history`](performance-schema-events-waits-history-table.html) table.

* `events_waits_history_long` is not checked if `event_waits_current` is `NO`. Otherwise, an `events_waits_history_long` value of `NO` or `YES` disables or enables collection of wait events in the [`events_waits_history_long`](performance-schema-events-waits-history-long-table.html) table.

#### Stage Event Consumers

 These consumers require both `global_instrumentation` and `thread_instrumentation` to be `YES` or they are not checked. If checked, they act as follows:

* `events_stages_current`, if `NO`, disables collection of individual stage events in the [`events_stages_current`](performance-schema-events-stages-current-table.html) table. If `YES`, it enables stage event collection and the Performance Schema checks the `events_stages_history` and `events_stages_history_long` consumers.

* `events_stages_history` is not checked if `event_stages_current` is `NO`. Otherwise, an `events_stages_history` value of `NO` or `YES` disables or enables collection of stage events in the [`events_stages_history`](performance-schema-events-stages-history-table.html) table.

* `events_stages_history_long` is not checked if `event_stages_current` is `NO`. Otherwise, an `events_stages_history_long` value of `NO` or `YES` disables or enables collection of stage events in the [`events_stages_history_long`](performance-schema-events-stages-history-long-table.html) table.

#### Statement Event Consumers

 These consumers require both `global_instrumentation` and `thread_instrumentation` to be `YES` or they are not checked. If checked, they act as follows:

* `events_statements_cpu`, if `NO`, disables measurement of `CPU_TIME`. If `YES`, and the instrumentation is enabled and timed, `CPU_TIME` is measured.

* `events_statements_current`, if `NO`, disables collection of individual statement events in the [`events_statements_current`](performance-schema-events-statements-current-table.html) table. If `YES`, it enables statement event collection and the Performance Schema checks the `events_statements_history` and `events_statements_history_long` consumers.

* `events_statements_history` is not checked if `events_statements_current` is `NO`. Otherwise, an `events_statements_history` value of `NO` or `YES` disables or enables collection of statement events in the [`events_statements_history`](performance-schema-events-statements-history-table.html) table.

* `events_statements_history_long` is not checked if `events_statements_current` is `NO`. Otherwise, an `events_statements_history_long` value of `NO` or `YES` disables or enables collection of statement events in the [`events_statements_history_long`](performance-schema-events-statements-history-long-table.html) table.

#### Transaction Event Consumers

 These consumers require both `global_instrumentation` and `thread_instrumentation` to be `YES` or they are not checked. If checked, they act as follows:

* `events_transactions_current`, if `NO`, disables collection of individual transaction events in the [`events_transactions_current`](performance-schema-events-transactions-current-table.html) table. If `YES`, it enables transaction event collection and the Performance Schema checks the `events_transactions_history` and `events_transactions_history_long` consumers.

* `events_transactions_history` is not checked if `events_transactions_current` is `NO`. Otherwise, an `events_transactions_history` value of `NO` or `YES` disables or enables collection of transaction events in the [`events_transactions_history`](performance-schema-events-transactions-history-table.html) table.

* `events_transactions_history_long` is not checked if `events_transactions_current` is `NO`. Otherwise, an `events_transactions_history_long` value of `NO` or `YES` disables or enables collection of transaction events in the [`events_transactions_history_long`](performance-schema-events-transactions-history-long-table.html) table.

#### Statement Digest Consumer

 The `statements_digest` consumer requires `global_instrumentation` to be `YES` or it is not checked. There is no dependency on the statement event consumers, so you can obtain statistics per digest without having to collect statistics in [`events_statements_current`](performance-schema-events-statements-current-table.html), which is advantageous in terms of overhead. Conversely, you can get detailed statements in [`events_statements_current`](performance-schema-events-statements-current-table.html) without digests (the `DIGEST` and `DIGEST_TEXT` columns are `NULL` in this case).

 For more information about statement digesting, see [Section 27.10, “Performance Schema Statement Digests and Sampling”](performance-schema-statement-digests.html).

