WSO2 DAS - 与 oracleDB 11g 的高 CPU 使用率
WSO2 DAS - High CPU usage with oracleDB 11g
我正在使用 Oracle 数据库 11g(关系数据库)配置 DAS 3.1.0 + APIM 2.0.0。
当我启用 DAS 分析统计与 API 管理器集成时,除了 DAS 显着提高机器与数据库的 CPU 消耗水平的部分外,几乎所有工作都正常。
我注意到他总是运行这个查询:
MERGE INTO API_REQ_USER_BROW_SUMMARY dest USING( SELECT :1 api, :2
version, :3 apiPublisher, :4 tenantDomain, :5 total_request_count, :6
year, :7 month, :8 day, :9 requestTime, :10 os, :11 browser FROM dual)
src ON(dest.api=src.api AND dest.version=src.version AND
dest.apiPublisher=src.apiPublisher AND dest.year=src.year AND
dest.month=src.month AND dest.day=src.day AND dest.os=src.os AND
dest.browser=src.browser AND dest.tenantDomain=src.tenantDomain)WHEN NOT
MATCHED THEN INSERT(api, version, apiPublisher, tenantDomain,
total_request_count, year, month, day, requestTime, os, browser)
VALUES(src.api, src.version, src.apiPublisher, src.tenantDomain,
src.total_request_count, src.year, src.month, src.day, src.requestTime,
src.os, src.browser) WHEN MATCHED THEN UPDATE SET
dest.total_request_count=src.total_request_count,
dest.requestTime=src.requestTime
我想知道是否有一种优化方法可以使机器的 cpu 数据集不至于被打败导致性能下降。
拜托,有没有人遇到过这个困难,你能帮帮我吗?
上面的查询发生的是,如果数据库中没有具有相同主键值的记录,或者如果有一些具有相同主键的记录,那么我们将更新现有记录,则将记录插入数据库。
Table "API_REQ_USER_BROW_SUMMARY" 有两列 "OS" 和 "browser",它们是 table 的主键的一部分。据观察,当 NULL 值插入 "OS" 和 "browser" 时,分析服务器和数据库挂起。
您可以做的是,(在执行以下步骤之前,您可能需要关闭分析服务器并重新启动数据库服务器)
- 转到{Analytics_server}/repository/deployment/server/carbonapps然后打开org_wso2_carbon_analytics_apim-1.0.0.car作为zip文件。
- 转到文件夹 APIM_USER_AGENT_STATS_1.0.0
- 打开APIM_USER_AGENT_STATS.xml
- 在脚本末尾(标记之前),您将看到如下所示的 sparkSql 查询。
INSERT INTO TABLE APIUserBrowserData SELECT api,version,apiPublisher,tenantDomain,total_request_count,year,month,day,requestTime,os,browser FROM API_REQUEST_USER_BROWSER_SUMMARY_FINAL;
- 将该行替换为以下内容。
INSERT INTO TABLE APIUserBrowserData SELECT api,version,apiPublisher,tenantDomain,total_request_count,year,month,day,requestTime, if(os is null, "UNKNOWN",os), if(browser is null, "UNKNOWN", browser) FROM API_REQUEST_USER_BROWSER_SUMMARY_FINAL;
这将防止 Spark 将 "OS" 和 "browser" 列的 NULL 值插入 table "API_REQ_USER_BROW_SUMMARY"。
请检查CPU 进行上述修改后消耗是否高
编辑:@artCampos,我无法发表评论,所以我正在编辑我的原始答案以回复您的评论。不会有任何副作用。但是,请注意,我们正在用字符串值 "UNKOWN" 替换 NULL 值。我认为在这种情况下这不会成为问题。您不需要丢弃任何现有数据。另请注意,在任何情况下,如果将 NULL 值插入到
DB primaryKeys,它在大多数RDBMS中都会失败。
我正在使用 Oracle 数据库 11g(关系数据库)配置 DAS 3.1.0 + APIM 2.0.0。
当我启用 DAS 分析统计与 API 管理器集成时,除了 DAS 显着提高机器与数据库的 CPU 消耗水平的部分外,几乎所有工作都正常。
我注意到他总是运行这个查询:
MERGE INTO API_REQ_USER_BROW_SUMMARY dest USING( SELECT :1 api, :2
version, :3 apiPublisher, :4 tenantDomain, :5 total_request_count, :6
year, :7 month, :8 day, :9 requestTime, :10 os, :11 browser FROM dual)
src ON(dest.api=src.api AND dest.version=src.version AND
dest.apiPublisher=src.apiPublisher AND dest.year=src.year AND
dest.month=src.month AND dest.day=src.day AND dest.os=src.os AND
dest.browser=src.browser AND dest.tenantDomain=src.tenantDomain)WHEN NOT
MATCHED THEN INSERT(api, version, apiPublisher, tenantDomain,
total_request_count, year, month, day, requestTime, os, browser)
VALUES(src.api, src.version, src.apiPublisher, src.tenantDomain,
src.total_request_count, src.year, src.month, src.day, src.requestTime,
src.os, src.browser) WHEN MATCHED THEN UPDATE SET
dest.total_request_count=src.total_request_count,
dest.requestTime=src.requestTime
我想知道是否有一种优化方法可以使机器的 cpu 数据集不至于被打败导致性能下降。
拜托,有没有人遇到过这个困难,你能帮帮我吗?
上面的查询发生的是,如果数据库中没有具有相同主键值的记录,或者如果有一些具有相同主键的记录,那么我们将更新现有记录,则将记录插入数据库。
Table "API_REQ_USER_BROW_SUMMARY" 有两列 "OS" 和 "browser",它们是 table 的主键的一部分。据观察,当 NULL 值插入 "OS" 和 "browser" 时,分析服务器和数据库挂起。
您可以做的是,(在执行以下步骤之前,您可能需要关闭分析服务器并重新启动数据库服务器)
- 转到{Analytics_server}/repository/deployment/server/carbonapps然后打开org_wso2_carbon_analytics_apim-1.0.0.car作为zip文件。
- 转到文件夹 APIM_USER_AGENT_STATS_1.0.0
- 打开APIM_USER_AGENT_STATS.xml
- 在脚本末尾(标记之前),您将看到如下所示的 sparkSql 查询。
INSERT INTO TABLE APIUserBrowserData SELECT api,version,apiPublisher,tenantDomain,total_request_count,year,month,day,requestTime,os,browser FROM API_REQUEST_USER_BROWSER_SUMMARY_FINAL;
- 将该行替换为以下内容。
INSERT INTO TABLE APIUserBrowserData SELECT api,version,apiPublisher,tenantDomain,total_request_count,year,month,day,requestTime, if(os is null, "UNKNOWN",os), if(browser is null, "UNKNOWN", browser) FROM API_REQUEST_USER_BROWSER_SUMMARY_FINAL;
这将防止 Spark 将 "OS" 和 "browser" 列的 NULL 值插入 table "API_REQ_USER_BROW_SUMMARY"。 请检查CPU 进行上述修改后消耗是否高
编辑:@artCampos,我无法发表评论,所以我正在编辑我的原始答案以回复您的评论。不会有任何副作用。但是,请注意,我们正在用字符串值 "UNKOWN" 替换 NULL 值。我认为在这种情况下这不会成为问题。您不需要丢弃任何现有数据。另请注意,在任何情况下,如果将 NULL 值插入到 DB primaryKeys,它在大多数RDBMS中都会失败。