Loading...
MySQL 9.5 Reference Manual 9.5의 29.4.6 Pre-Filtering by Thread의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
threads table에는 각 서버 스레드마다 한 개의 row가 포함됩니다. 각 row는 스레드에 대한 정보와 해당 스레드에 대해 모니터링이 활성화되어 있는지를 나타냅니다. Performance Schema가 어떤 스레드를 모니터링하려면 다음 조건이 모두 참이어야 합니다:
setup_consumers table의 thread_instrumentation consumer가 YES여야 합니다.
threads.INSTRUMENTED column이 YES여야 합니다.
모니터링은 setup_instruments table에서 활성화된 인스트루먼트로부터 생성된 스레드 이벤트에 대해서만 발생합니다.
threads table은 또한 각 서버 스레드에 대해 히스토리컬 이벤트 로깅을 수행할지 여부를 나타냅니다. 여기에는 wait, stage, statement, transaction 이벤트가 포함되며, 다음 table들에 대한 로깅에 영향을 줍니다:
1events_waits_history 2events_waits_history_long 3events_stages_history 4events_stages_history_long 5events_statements_history 6events_statements_history_long 7events_transactions_history 8events_transactions_history_long
히스토리컬 이벤트 로깅이 발생하려면 다음 조건이 모두 참이어야 합니다:
setup_consumers table의 적절한 history 관련 consumer가 활성화되어 있어야 합니다. 예를 들어, events_waits_history 및 events_waits_history_long table에서 wait 이벤트 로깅을 수행하려면 해당 events_waits_history 및 events_waits_history_long consumer가 YES여야 합니다.
threads.HISTORY column이 YES여야 합니다.
로깅은 setup_instruments table에서 활성화된 인스트루먼트로부터 생성된 스레드 이벤트에 대해서만 발생합니다.
foreground 스레드(클라이언트 커넥션으로부터 생성되는 경우)에 대해서는 threads table row의 INSTRUMENTED 및 HISTORY column 초기 값이, 해당 스레드와 연결된 사용자 계정이 setup_actors table의 어떤 row와 일치하는지에 의해 결정됩니다. 값은 일치하는 setup_actors table row의 ENABLED 및 HISTORY column으로부터 가져옵니다.
background 스레드의 경우에는 연결된 사용자가 없습니다. INSTRUMENTED 및 HISTORY는 기본적으로 YES이며, setup_actors는 참조되지 않습니다.
초기 setup_actors 내용은 다음과 같습니다:
1mysql> SELECT * FROM performance_schema.setup_actors; 2+------+------+------+---------+---------+ 3| HOST | USER | ROLE | ENABLED | HISTORY | 4+------+------+------+---------+---------+ 5| % | % | % | YES | YES | 6+------+------+------+---------+---------+
HOST 및 USER column에는 실제 호스트 또는 사용자 이름, 혹은 모든 이름과 일치하도록 하기 위한 '%'가 포함되어야 합니다.
ENABLED 및 HISTORY column은, 앞에서 설명한 다른 조건을 충족하는 것을 전제로, 일치하는 스레드에 대해 인스트루멘테이션과 히스토리컬 이벤트 로깅을 활성화할지 여부를 나타냅니다.
Performance Schema가 각 새로운 foreground 스레드에 대해 setup_actors에서 일치를 검사할 때, 먼저 USER 및 HOST column을 사용하여 보다 구체적인 일치를 찾으려 합니다 (ROLE은 사용되지 않습니다):
USER='literal' 및 HOST='literal'인 row.
USER='literal' 및 HOST='%'인 row.
USER='%' 및 HOST='literal'인 row.
USER='%' 및 HOST='%'인 row.
일치가 발생하는 순서는, 서로 다른 일치 setup_actors row가 서로 다른 USER 및 HOST 값을 가질 수 있기 때문에 중요합니다. 이를 통해 ENABLED 및 HISTORY column 값에 기반하여 호스트, 사용자, 또는 계정(사용자와 호스트 조합)별로 선택적으로 인스트루멘테이션과 히스토리컬 이벤트 로깅을 적용할 수 있습니다:
최상의 일치 row가 ENABLED=YES인 경우, 해당 스레드의 INSTRUMENTED 값은 YES가 됩니다. 최상의 일치 row가 HISTORY=YES인 경우, 해당 스레드의 HISTORY 값은 YES가 됩니다.
최상의 일치 row가 ENABLED=NO인 경우, 해당 스레드의 INSTRUMENTED 값은 NO가 됩니다. 최상의 일치 row가 HISTORY=NO인 경우, 해당 스레드의 HISTORY 값은 NO가 됩니다.
일치하는 row가 전혀 없으면, 해당 스레드의 INSTRUMENTED 및 HISTORY 값은 NO가 됩니다.
setup_actors row의 ENABLED 및 HISTORY column은 서로 독립적으로 YES 또는 NO로 설정될 수 있습니다. 이는 히스토리컬 이벤트를 수집할지 여부와 별개로 인스트루멘테이션을 활성화할 수 있음을 의미합니다.
기본적으로, setup_actors table이 처음에 HOST와 USER 모두에 대해 '%'를 가진 row를 포함하기 때문에, 모든 새로운 foreground 스레드에 대해 모니터링과 히스토리컬 이벤트 수집이 활성화됩니다. 일부 foreground 스레드에 대해서만 모니터링을 활성화하는 등 더 제한적인 일치를 수행하려면, 모든 커넥션과 일치하는 이 row를 변경하고, 보다 구체적인 HOST/USER 조합에 대한 row를 추가해야 합니다.
setup_actors를 다음과 같이 수정한다고 가정해 봅니다:
1UPDATE performance_schema.setup_actors 2SET ENABLED = 'NO', HISTORY = 'NO' 3WHERE HOST = '%' AND USER = '%'; 4INSERT INTO performance_schema.setup_actors 5(HOST,USER,ROLE,ENABLED,HISTORY) 6VALUES('localhost','joe','%','YES','YES'); 7INSERT INTO performance_schema.setup_actors 8(HOST,USER,ROLE,ENABLED,HISTORY) 9VALUES('hosta.example.com','joe','%','YES','NO'); 10INSERT INTO performance_schema.setup_actors 11(HOST,USER,ROLE,ENABLED,HISTORY) 12VALUES('%','sam','%','NO','YES');
UPDATE statement는 기본 일치를 변경하여 인스트루멘테이션과 히스토리컬 이벤트 수집을 비활성화합니다. INSERT statement는 더 구체적인 일치에 대한 row를 추가합니다.
이제 Performance Schema는 새로운 커넥션 스레드에 대해 INSTRUMENTED 및 HISTORY 값을 다음과 같이 설정합니다:
joe가 로컬 호스트에서 접속하면, 해당 커넥션은 첫 번째로 삽입한 row와 일치합니다. 이 스레드의 INSTRUMENTED 및 HISTORY 값은 YES가 됩니다.
joe가 hosta.example.com에서 접속하면, 해당 커넥션은 두 번째로 삽입한 row와 일치합니다. 이 스레드의 INSTRUMENTED 값은 YES가 되고 HISTORY 값은 NO가 됩니다.
joe가 다른 어떤 호스트에서 접속하면, 일치하는 row가 없습니다. 이 스레드의 INSTRUMENTED 및 HISTORY 값은 NO가 됩니다.
sam이 어떤 호스트에서 접속하든, 해당 커넥션은 세 번째로 삽입한 row와 일치합니다. 이 스레드의 INSTRUMENTED 값은 NO가 되고 HISTORY 값은 YES가 됩니다.
다른 어떤 커넥션에 대해서는, HOST와 USER가 '%'로 설정된 row가 일치합니다. 이 row는 이제 ENABLED 및 HISTORY가 NO로 설정되어 있으므로, 이 스레드의 INSTRUMENTED 및 HISTORY 값은 NO가 됩니다.
setup_actors table에 대한 수정은, 수정 이후에 생성되는 foreground 스레드에만 영향을 미치며, 기존 스레드에는 영향을 주지 않습니다. 기존 스레드에 영향을 주려면, threads table row의 INSTRUMENTED 및 HISTORY column을 수정해야 합니다.
29.4.5 Pre-Filtering by Object
29.4.7 Pre-Filtering by Consumer