programing

인덱스가 없는 느린 쿼리를 식별하려면 어떻게 해야 합니까?

copyandpastes 2022. 10. 2. 22:32
반응형

인덱스가 없는 느린 쿼리를 식별하려면 어떻게 해야 합니까?

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에서 집계된 번호를 가져옵니다.

pt-산화합물의 매개에 의한

검사된 행이 전송된 행에 비해 매우 큰 경우 인덱스가 원인일 수 있습니다.

요약하면 로그를 사용하여 쿼리를 식별할 수 있습니다.이러한 로그를 사용하여 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

반응형