programing

MariaDB Analyze FORMAT=JSON 출력에서 전체 시간을 계산할 수 없습니다.

goodsources 2023. 11. 7. 20:49
반응형

MariaDB Analyze FORMAT=JSON 출력에서 전체 시간을 계산할 수 없습니다.

MariaDB에서 몇 가지 쿼리를 최적화하려고 하는데 ANALIZE FORMAT=JSON 기능이 매우 유용하다는 것을 알게 되었습니다.하지만 어떤 복합적인 조인의 경우, 시간이 맞지 않거나, 그에 근접하는 사례들을 접하게 됩니다.

작동할 때의 예로, 하나의 쿼리의 경우 query_block r_total_time_ms가 약 239ms였습니다. 쿼리 자체에는 11개의 테이블이 포함되어 있었고, 그 11개 중 하나는 거의 227ms를 차지하여 쿼리에 소요된 시간의 대부분을 차지했습니다.인덱스를 변경하는 과정이 분명히 있었고, 이를 통해 해당 요소를 1ms 미만으로 줄였고, 총 쿼리 시간은 1ms를 조금 넘었습니다.

그러나 다른 경우에는 쿼리_block r_total_time_ms가 163ms를 약간 넘습니다. 쿼리에는 9개의 테이블 및/또는 하위 쿼리가 포함되며 구성 요소 중 가장 높은 r_total_time_ms가 15ms를 조금 넘습니다.이 모든 구성 요소의 합계는 약 25ms입니다.그렇다면 나머지 시간은 어디에서 보내는 것일까요?다른 140달러 짜리들은 뭘 하고 있는 거지?구분할 수 있는 방법이 있다면, 그게 뭔지 모르겠습니다.

다음은 제가 애를 먹고 있는 분석 결과입니다.

ANALYZE
{
  "query_block": {
    "select_id": 1,
    "r_loops": 1,
    "r_total_time_ms": 163.18,
    "filesort": {
      "sort_key": "tcontent.lastUpdate",
      "r_loops": 1,
      "r_total_time_ms": 0.0147,
      "r_limit": 20,
      "r_used_priority_queue": false,
      "r_output_rows": 2,
      "r_buffer_size": "252",
      "temporary_table": {
        "table": {
          "table_name": "tcontent",
          "access_type": "index_merge",
          "possible_keys": [
            "IX_TContent",
            "IX_TContent_1",
            "IX_TContent_2",
            "IX_TContent_5",
            "IX_tcontent_mobileExclude",
            "IX_tcontent_displaystart",
            "IX_tcontent_displaystop",
            "IX_tcontent_approved",
            "IX_tcontent_active",
            "IX_tcontent_display",
            "IX_tcontent_type",
            "ntID_Type_subType_Display_DisplayStart_DisplayStop_mobileExclude",
            "ix_tcontent_SiteID_Active_Filename_Type"
          ],
          "key_length": "2,2,2,2,2,78,106",
          "index_merge": {
            "union": {
              "range": {
                "key": "IX_tcontent_display",
                "used_key_parts": ["Display"]
              },
              "range": {
                "key": "IX_tcontent_display",
                "used_key_parts": ["Display"]
              },
              "intersect": {
                "range": {
                  "key": "IX_tcontent_approved",
                  "used_key_parts": ["Approved"]
                },
                "range": {
                  "key": "IX_tcontent_active",
                  "used_key_parts": ["Active"]
                },
                "range": {
                  "key": "IX_tcontent_display",
                  "used_key_parts": ["Display"]
                },
                "range": {
                  "key": "IX_TContent_2",
                  "used_key_parts": ["SiteID"]
                },
                "range": {
                  "key": "IX_TContent_5",
                  "used_key_parts": ["ModuleID"]
                }
              }
            }
          },
          "r_loops": 1,
          "rows": 2583,
          "r_rows": 3966,
          "r_total_time_ms": 15.183,
          "filtered": 96.129,
          "r_filtered": 98.664,
          "attached_condition": "tcontent.Active = 1 and tcontent.Approved = 1 and tcontent.searchExclude = 0 and tcontent.SiteID = 'CAE' and tcontent.ModuleID = '00000000000000000000000000000000000' and tcontent.ContentID <> '00000000000000000000000000000000001' and tcontent.`Type` <> 'Module' and (tcontent.Display = 1 or tcontent.Display = 2 and (tcontent.DisplayStart <= '2018-01-09 15:17:00' and (tcontent.DisplayStop >= '2018-01-09 15:17:00' or tcontent.DisplayStop is null) or tcontent.DisplayStart <= '2019-01-09 15:17:00' and (tcontent.DisplayStop >= '2018-01-09 15:17:00' or tcontent.DisplayStop is null))) and (tcontent.mobileExclude is null or tcontent.mobileExclude in (0,1))"
        },
        "table": {
          "table_name": "<subquery2>",
          "access_type": "eq_ref",
          "possible_keys": ["distinct_key"],
          "key": "distinct_key",
          "key_length": "105",
          "used_key_parts": ["contentHistID"],
          "ref": ["func"],
          "r_loops": 3913,
          "rows": 1,
          "r_rows": 5.1e-4,
          "r_total_time_ms": 6.2577,
          "filtered": 100,
          "r_filtered": 100,
          "attached_condition": "tcontent.Display = 1 or tcontent.Display = 2 and (tcontent.DisplayStart <= '2018-01-09 15:17:00' and (tcontent.DisplayStop >= '2018-01-09 15:17:00' or tcontent.DisplayStop is null) or tcontent.DisplayStart <= '2019-01-09 15:17:00' and (tcontent.DisplayStop >= '2018-01-09 15:17:00' or tcontent.DisplayStop is null))",
          "materialized": {
            "unique": 1,
            "query_block": {
              "select_id": 2,
              "table": {
                "table_name": "tcontentcategories",
                "access_type": "ALL",
                "possible_keys": ["PRIMARY"],
                "r_loops": 1,
                "rows": 166,
                "r_rows": 166,
                "r_total_time_ms": 0.2246,
                "filtered": 100,
                "r_filtered": 0.6024,
                "attached_condition": "tcontentcategories.path like '%D3386B7B-5056-8740-7CA949A8C39FACF3%'"
              },
              "table": {
                "table_name": "tcontentcategoryassign",
                "access_type": "ref",
                "possible_keys": [
                  "PRIMARY",
                  "IX_tcontentcategoryassign_categoryID"
                ],
                "key": "IX_tcontentcategoryassign_categoryID",
                "key_length": "105",
                "used_key_parts": ["categoryID"],
                "ref": ["dbMuraCMS.tcontentcategories.categoryID"],
                "r_loops": 1,
                "rows": 53,
                "r_rows": 33,
                "r_total_time_ms": 0.0413,
                "filtered": 100,
                "r_filtered": 100,
                "using_index": true
              }
            }
          }
        },
        "table": {
          "table_name": "tfiles",
          "access_type": "eq_ref",
          "possible_keys": ["PRIMARY"],
          "key": "PRIMARY",
          "key_length": "105",
          "used_key_parts": ["fileID"],
          "ref": ["dbMuraCMS.tcontent.FileID"],
          "r_loops": 2,
          "rows": 1,
          "r_rows": 1,
          "r_total_time_ms": 0.0109,
          "filtered": 100,
          "r_filtered": 100,
          "attached_condition": "trigcond(trigcond(tcontent.FileID is not null))"
        },
        "table": {
          "table_name": "tcontentstats",
          "access_type": "eq_ref",
          "possible_keys": ["PRIMARY"],
          "key": "PRIMARY",
          "key_length": "182",
          "used_key_parts": ["contentID", "siteID"],
          "ref": ["dbMuraCMS.tcontent.ContentID", "dbMuraCMS.tcontent.SiteID"],
          "r_loops": 2,
          "rows": 1,
          "r_rows": 0,
          "r_total_time_ms": 0.0127,
          "filtered": 100,
          "r_filtered": 100,
          "attached_condition": "trigcond(trigcond(tcontent.ContentID is not null and tcontent.SiteID is not null))"
        },
        "table": {
          "table_name": "tparent",
          "access_type": "ref",
          "possible_keys": [
            "IX_TContent",
            "IX_TContent_2",
            "IX_tcontent_active",
            "ntID_Type_subType_Display_DisplayStart_DisplayStop_mobileExclude",
            "ix_tcontent_SiteID_Active_Filename_Type"
          ],
          "key": "IX_TContent",
          "key_length": "106",
          "used_key_parts": ["ContentID"],
          "ref": ["dbMuraCMS.tcontent.ParentID"],
          "r_loops": 2,
          "rows": 1,
          "r_rows": 238,
          "r_total_time_ms": 1.5375,
          "filtered": 100,
          "r_filtered": 0.4202,
          "attached_condition": "trigcond(tcontent.Display = 1 or tcontent.Display = 2 and (tparent.`Type` <> 'Calendar' and tcontent.DisplayStart <= '2018-01-09 15:17:00' and (tcontent.DisplayStop >= '2018-01-09 15:17:00' or tcontent.DisplayStop is null) or tparent.`Type` = 'Calendar' and tcontent.DisplayStart <= '2019-01-09 15:17:00' and (tcontent.DisplayStop >= '2018-01-09 15:17:00' or tcontent.DisplayStop is null))) and trigcond(tparent.SiteID = tcontent.SiteID and tparent.Active = 1 and trigcond(tcontent.ParentID is not null))"
        },
        "table": {
          "table_name": "tcontentfilemetadata",
          "access_type": "ALL",
          "possible_keys": [
            "IX_tcontentfilemetadata_contenthistid",
            "IX_tcontentfilemetadata_fileid"
          ],
          "r_loops": 2,
          "rows": 1,
          "r_rows": 0,
          "r_total_time_ms": 0.0045,
          "filtered": 100,
          "r_filtered": 100,
          "attached_condition": "trigcond(tcontentfilemetadata.fileid = tcontent.FileID and tcontentfilemetadata.contenthistid = tcontent.ContentHistID)"
        }
      }
    }
  }
}

언급URL : https://stackoverflow.com/questions/48176711/cant-account-for-full-time-in-mariadb-analyze-format-json-output

반응형