인덱스가 없는 느린 쿼리를 식별하려면 어떻게 해야 합니까?
SET GLOBAL log_slow_verbility='sloice_plan',sloice'를 사용하여 슬로우 로그에서 많은 출력을 얻을 수 있지만 설명을 이해하는데 어려움을 겪고 있습니다.
# User@Host: root[root] @ [10.0.1.5]
# Thread_id: 31 Schema: enterprise QC_hit: No
# Query_time: 0.654855 Lock_time: 0.000245 Rows_sent: 50 Rows_examined: 279419
# Rows_affected: 0
# Full_scan: Yes Full_join: Yes Tmp_table: Yes Tmp_table_on_disk: Yes
# Filesort: Yes Filesort_on_disk: No Merge_passes: 0 Priority_queue: Yes
#
# explain: id select_type table type possible_keys key key_len ref rows r_rows filtered r_filtered Extra
# explain: 1 SIMPLE external_property_groups_areas ALL unique_id_area,search_id_area,search_country NULL NULL NULL 20 20.00 100.00 100.00 Using temporary; Using filesort
# explain: 1 SIMPLE external_property_level_1_buildings ref unique_id_building,building_id_area_id building_id_area_id 5 enterprise.external_property_groups_areas.id_area 3 6.00 100.00 100.00
# explain: 1 SIMPLE external_property_level_2_units ref unit_building_id,property_level_2_created_by unit_building_id 4 enterprise.external_property_level_1_buildings.id_building 25.13 100.00 100.00 Using index condition
# explain: 1 SIMPLE ut_unit_types eq_ref unique_property_type,query_optimization_designation unique_property_type 1022 enterprise.external_property_level_2_units.unit_type 1 1.00 100.00 100.00 Using where; Using index
# explain: 1 SIMPLE property_level_2_units eq_ref PRIMARY,property_level_2_organization_id PRIMARY 1530 enterprise.external_property_level_2_units.external_id,enterprise.external_property_level_2_units.external_system_id,enterprise.external_property_level_2_units.external_table,const 1 0.98 100.00 100.00
# explain: 1 SIMPLE a eq_ref unique_id_unit,unit_building_id unique_id_unit 4 enterprise.property_level_2_units.system_id_unit 1 0.98 100.00 100.00 Using where
# explain: 1 SIMPLE c eq_ref unique_id_building unique_id_building 4 enterprise.a.building_system_id 1 1.00 100.00 100.00 Using index
# explain: 1 SIMPLE b ref property_property_type property_property_type 4 const 142 458.00 100.00 0.17 Using where
# explain: 1 SIMPLE property_groups_countries ALL country_names,coutnry_codes NULL NULL NULL 245 245.00 100.00 0.31 Using where; Using join buffer (flat, BNL join)
#
- 문의할 때 속도가 느린 부품을 식별하려면 어떻게 해야 합니까?
- 누락된 인덱스를 빠르게 식별할 수 있는 지름길이 있습니까?
또한 내 세션의 스크린캐스트를 한다.
이러한 SQL 쿼리의 성능을 향상시킬 수 있는 방법을 찾는 데 도움이 되는 리소스를 알려주시면 감사하겠습니다.
당신의 질문은 매우 일반적이기 때문에, 구체적인 질문에 답한 후, 더 많은 정보를 찾을 수 있는 곳으로 보내드리겠습니다.
로그에 대한 설명은 괜찮지만, 읽을 수 없는 것은 당신뿐만이 아닙니다.로그를 사용하여 느린 쿼리를 식별합니다.EXPLAIN
(및 기타 도구)를 사용하여 진행 상황을 디버깅합니다.로그에 있는 것은 좋지만, 읽기 쉽도록 다음과 같이 라이브 포맷해 주세요.
질문에 대한 답변:
인덱스가 사용되고 있지 않은지 어떻게 알 수 있습니까?
type
(그리고)key
에서 알 수 .) 라고 입력합니다.ALL
는 풀 것을 하며, 한 키는 「키/키」가 .NULL
활자const
,ref
★★★★★★★★★★★★★★★★★」range
일반적으로 선호됩니다(전략이 더 있습니다). 기타 에 있습니다.Extra:
Using filesort
즉, 결과를 정렬하기 위한 두 번째 패스가 필요하며 경우에 따라 인덱스를 사용하면 자동으로 결과를 순서대로 얻을 수 있습니다.
다음은 인덱스를 사용한 다른 쿼리의 예입니다.
인덱스를 사용하여 결과 속도를 높일 수 있는 방법은 여러 가지가 있기 때문에 단순합니다(ICP, covering index, max(), ...).
서도 '여백이 없다'는 이야기를 할 수 요.JOIN
및 서브쿼리: 순서와 개서가 가능하여 보다 나은 전략을 얻을 수 있습니다.
문의할 때 속도가 느린 부품을 식별하려면 어떻게 해야 합니까?
두 가지 옵션이 있습니다.
쿼리 프로파일링(각 쿼리 단계에 소요된 단계별 시간 제공)을 통해 특정 쿼리로 쿼리를 수행하거나 활성화할 수 있습니다.일반적인 출력:
SHOW PROFILE CPU FOR QUERY 5; +----------------------+----------+----------+------------+ | Status | Duration | CPU_user | CPU_system | +----------------------+----------+----------+------------+ | starting | 0.000042 | 0.000000 | 0.000000 | | checking permissions | 0.000044 | 0.000000 | 0.000000 | | creating table | 0.244645 | 0.000000 | 0.000000 | | After create | 0.000013 | 0.000000 | 0.000000 | | query end | 0.000003 | 0.000000 | 0.000000 | | freeing items | 0.000016 | 0.000000 | 0.000000 | | logging slow query | 0.000003 | 0.000000 | 0.000000 | | cleaning up | 0.000003 | 0.000000 | 0.000000 | +----------------------+----------+----------+------------+
핸들러 통계: 시간 의존적인 검색 전략 메트릭과 각 검색 행 수를 제공합니다.
이 마지막 것은 다소 비우호적인 것처럼 보일 수 있지만, 일단 이해하면 내부 엔진 호출이 무엇인지 알면 인덱스 사용 현황과 풀스캔을 쉽게 확인할 수 있습니다.
누락된 인덱스를 빠르게 식별할 수 있는 지름길이 있습니까?
네, 를 유효하게 하고 있는 는, 「」를 유효하게 합니다.performance_schema
할 수 .sys
" " "SELECT * FROM sys.statement_analysis;
full_scan
그러면 전체 검색을 수행하는 쿼리가 제공됩니다(인덱스를 사용하지 않는 경우). 다음, '나다'로 할 수 .rows_examined
,rows_examined_avg
,avg_latency
등 수
performance_schema를 사용하지 않거나 사용할 수 없는 경우 로그를 사용하여 percona-toolkit에서 집계된 번호를 가져옵니다.
검사된 행이 전송된 행에 비해 매우 큰 경우 인덱스가 원인일 수 있습니다.
요약하면 로그를 사용하여 쿼리를 식별할 수 있습니다.이러한 로그를 사용하여 performance_schema 또는 pt-query-digest로 집약합니다.단, 가장 문제가 되는 쿼리를 식별한 후에는 다른 툴을 사용하여 디버깅합니다.
느린 쿼리를 식별하는 방법과 쿼리 최적화에 대한 자세한 내용은 슬라이드 "Query Optimization with MySQL 8.0 and MariaDB 10.3"을 참조하십시오.저는 생계를 위해 이것을 하고 있습니다.최적화는 저의 열정입니다.이것들을 봐주셨으면 합니다(저는 당신에게 책을 파는 것이 아닙니다.그것들은 무료이며 크리에이티브 커먼즈 라이선스를 가지고 있습니다).
"색인을 사용하지 않는 느린 쿼리" - 누가 신경써요?주의해야 할 것은 "저속 쿼리"입니다.그런 다음 쿼리가 느린 이유를 파악하려고 할 때 인덱스 문제를 발견하거나 발견하지 못할 수 있습니다.
하여 'jynus를 합니다.SHOW CREATE TABLE
하는 및 "" " " " " "EXPLAIN SELECT ...
그런 다음 인덱스에 오류가 있는지 확인할 수 있습니다.츠미야
다이제스트 등에 대한 자세한 내용은http://http://mysql.rjweb.org/doc.php/mysql_analysis#slow_queries_and_slowlog 를 참조해 주세요.
비디오 재생
아아아아아아아아아아아아아아아아아아아.EXPLAIN
어떤 인덱스가 필요한지, 어떤 테이블이 더 나은 인덱스를 필요로 하는지 알 수 없습니다.
텍스트는 동영상이 아닌 텍스트를 사용해 주세요.
Rows와 "높으면 해당 인덱스가 할 수 합니다.Rows"와 "r_rows"는 높으면 해당 표에 좋은 인덱스가 부족할 수 있다는 단서를 제공합니다.★★★★★★★★★★★를 입력해 주세요.SHOW CREATE TABLE
이미 가지고 있는 인덱스를 확인할 수 있습니다.
가능하면 짧은 별칭을 사용하십시오. 긴 별칭은 많은 혼란을 야기합니다.
언급URL : https://stackoverflow.com/questions/56015661/how-do-i-identify-slow-queries-missing-an-index
'programing' 카테고리의 다른 글
utf8_bin과 latin1_general_cs의 차이점은 무엇입니까? (0) | 2022.10.02 |
---|---|
line by line c - Linux ubuntu에서의 c++ 코드 디버깅 (0) | 2022.10.02 |
onclick/onchange 행사에서 HTML체크 상자의 값을 추가하십시오. (0) | 2022.10.02 |
mcrypt는 권장되지 않습니다.대안은 무엇입니까? (0) | 2022.10.02 |
라라벨 블랭크화이트스크린 (0) | 2022.10.02 |