5.4.1.5 쿼리 캐시 프로브
쿼리 캐시 프로브는 하나의 쿼리를 실행할 때 시작합니다. query-cache-hit
쿼리는 쿼리가 쿼리 캐시에 존재할 때 트리거됩니다 쿼리 캐시 정보를 반환하는 데 사용할 수 있습니다. 인수는 원래 쿼리 텍스트 및 쿼리에 대해 쿼리 캐시에서 반환되는 행 수가 포함됩니다. 쿼리가 쿼리 캐시에 존재하지 않거나 쿼리 캐시가 사용 가능하지 않은 경우, query-cache-miss
프로브가 대신 트리거됩니다.
query-cache-hit (query, rows) query-cache-miss (query)
query-cache-hit
: 쿼리가 쿼리 캐시에 발견 될 때 트리거됩니다. 첫 번째 인수query
는 쿼리의 원래 텍스트가 포함됩니다. 두 번째 인수rows
는 캐시 된 쿼리의 행 수를 포함하는 정수입니다.query-cache-miss
: 쿼리가 쿼리 캐시에 발견되지 않았던 때 트리거됩니다. 첫 번째 인수query
는 쿼리의 원래 텍스트가 포함됩니다.
쿼리 캐시 프로브를 메인 쿼리의 프로브와 최적으로 결합하여 지정된 쿼리에 대해 쿼리 캐시를 사용했을 때와 사용하지 않을 때의 시간 차이를 확인할 수 있습니다. 예를 들어, 다음의 D 스크립트에서는 쿼리 및 쿼리 캐시 정보를 결합하여 모니터 중에 출력되는 정보입니다.
#! / usr / sbin / dtrace -s #pragma D option quiet dtrace ::: BEGIN { printf ( "% - 20s % -20s % -40s % 2s % -9s \ n", "Who", "Database", "Query", "QC", "Time (ms)"); } mysql * ::: query-start { self-> query = copyinstr (arg0); self-> connid = arg1; self-> db = copyinstr (arg2); self-> who = strjoin (copyinstr (arg3) strjoin ( "@", copyinstr (arg4))); self-> querystart = timestamp; self-> qc = 0; } mysql * ::: query-cache-hit { self-> qc = 1; } mysql * ::: query-cache-miss { self-> qc = 0; } mysql * ::: query-done { printf ( "% - 20s % -20s % -40s % -2s % -9d \ n", self-> who, self-> db, self-> query (self-> qc? "Y": "N" ), (timestamp - self-> querystart) / 1000000); }
스크립트를 실행하면 쿼리 캐시의 영향을 이해할 수 있습니다. 처음에는 쿼리 캐시는 비활성화되어 있습니다. 쿼리 캐시 크기를 설정하고 쿼리를 여러 번 실행하면 쿼리 데이터를 반환하는 쿼리 캐시가 사용되었는지가 나타날 것입니다.
shell> ./query-cache.d root @ localhost test select * from t1 order by i limit 10 N 1072 root @ localhost set global query_cache_size = 262144 N 0 root @ localhost test select * from t1 order by i limit 10 N 781 root @ localhost test select * from t1 order by i limit 10 Y 0