文章 姚 鑫 · 四月 25, 2021 10m read

第五章 优化查询性能(四)

注释选项

可以在SELECTINSERTUPDATEDELETETRUNCATE表命令中为查询优化器指定一个或多个注释选项。 注释选项指定查询优化器在编译SQL查询期间使用的选项。 通常,注释选项用于覆盖特定查询的系统范围默认配置。

语法

语法/*#OPTIONS */(在/*#之间没有空格)指定了一个注释选项。 注释选项不是注释; 它为查询优化器指定一个值。 注释选项使用JSON语法指定,通常是“key:value”对,例如: /*#OPTIONS {"optionName":value} */。 支持更复杂的JSON语法,比如嵌套值。

注释选项不是注释; 除了JSON语法之外,它可能不包含任何文本。 包含非json文本在/* ... */分隔符导致SQLCODE -153错误。 InterSystems SQL不验证JSON字符串的内容。

#OPTIONS关键字必须用大写字母指定。 JSON的大括号语法中不应该使用空格。 如果SQL代码用引号括起来,比如动态SQL语句,JSON语法中的引号应该是双引号。 例如:myquery="SELECT Name FROM Sample.

0
0 185
问题 立峰 乔 · 四月 12, 2021

数据库日志经常性出现如下日志,希望遇到过的朋友给出解决方法!

04/13/21-07:21:28:522 (191540) 0 ECP: Lost net connection: Error 104=(Connection reset by peer)
04/13/21-07:21:28:522 (191540) 1 ECP: connection from 'ECP1:HIS-AAA4:CACHE' dropped (1.1.1.1:14400)
04/13/21-07:21:28:672 (198470) 0 ECP: Mirror Connection request from 'ECP1:HIS-AAA:CACHE' (1.1.1.1:14419)

3
0 285
文章 姚 鑫 · 四月 24, 2021 12m read

第五章 优化查询性能(三)

查询执行计划

可以使用解释或显示计划工具来显示SELECTDECLAREUPDATEDELETETRUNCATE TABLE和一些INSERT操作的执行计划。这些操作统称为查询操作,因为它们使用SELECT查询作为其执行的一部分。InterSystems IRIS在准备查询操作时生成执行计划;不必实际执行查询来生成执行计划。

默认情况下,这些工具显示InterSystems IRIS认为的最佳查询计划。对于大多数查询,有多个可能的查询计划。除了InterSystems IRIS认为最佳的查询计划外,还可以生成和显示备用查询执行计划。

InterSystems IRIS提供以下查询计划工具:

  • $SYSTEM.SQL.ExPlan()方法可用于生成和显示XML格式的查询计划以及备选查询计划(可选)。
  • SQL EXPLAIN命令可用于生成XML格式的查询计划,还可以选择生成备选查询计划和SQL统计信息。所有生成的查询计划和统计信息都包含在名为Plan的单个结果集字段中。请注意,EXPLAIN命令只能与SELECT查询一起使用。
  • 管理门户 - >系统资源管理器 - >SQL界面显示计划按钮。
  • 管理门户 — >系统资源管理器 — >工具—>SQL性能工具。

image

对于生成的%PARALLEL和分片查询,这些工具显示所有适用的查询计划。

0
0 196
问题 water huang · 四月 21, 2021

我需要能修改xml 文件里面某个节点的值,目前 使用的方法是EnsLib.EDI.XML.Document 里面的 SetValueAt,但是导入的字符串或者流有中文的话,或者设置新值包含中文的话,使用 OutputToString输出字符串,中文是乱码的,怎么处理呢

2
0 308
公告 Louis Lu · 四月 23, 2021

InterSystems IRIS、IRIS for Health和HealthShare Health Connect的2021.1版本的预览版现已发布。

由于这是一个预览版,我们希望在下个月的通用版本发布之前了解您对这个新版本的体验。请通过开发者社区分享您的反馈,以便我们能够共同打造一个更好的产品。

InterSystems IRIS数据平台2021.1是一个扩展维护(EM)版本。自2020.1(上一个EM版本)以来,在持续交付(CD)版本中增加了许多重要的新功能和改进。请参考2020.2、2020.3和2020.4的发布说明,了解这些内容的概况。

这个版本的增强功能为开发人员提供了更大的自由度,可以用他们选择的语言构建快速和强大的应用程序,并使用户能够通过新的和更快的分析功能更有效地处理大量的信息。

通过InterSystems IRIS 2021.1,客户可以部署InterSystems IRIS Adaptive Analytics,这是一个附加产品,它扩展了InterSystems IRIS,为分析终端用户提供了更强大的易用性、灵活性、可扩展性以及效率,而不管他们选择何种商业智能(BI)工具。它能够定义一个利于分析的业务模型,并通过在后台自主构建和维护临时数据结构,透明地加速针对该模型运行分析查询时的工作负载。

0
0 535
文章 姚 鑫 · 四月 23, 2021 6m read

第五章 优化查询性能(二)

使用索引

索引通过维护常见请求数据的排序子集,提供了一种优化查询的机制。 确定哪些字段应该被索引需要一些思考:太少或错误的索引和关键查询将运行太慢; 太多的索引会降低插入和更新性能(因为必须设置或更新索引值)。

什么索引

要确定添加索引是否会提高查询性能,请从管理门户SQL接口运行查询,并在性能中注意全局引用的数量。 添加索引,然后重新运行查询,注意全局引用的数量。 一个有用的索引应该减少全局引用的数量。 可以通过在WHERE子句或ON子句条件前使用%NOINDEX关键字来防止使用索引。

应该为联接中指定的字段(属性)编制索引。左外部联接从左表开始,然后查看右表;因此,应该为右表中的字段建立索引。在下面的示例中,应该为T2.f2编制索引:

   FROM Table1 AS T1 LEFT OUTER JOIN Table2 AS T2 ON T1.f1 = T2.f2

内部联接应该在两个ON子句字段上都有索引。

执行“显示计划”,然后找到第一张map。 如果查询计划中的第一个项目是“Read master map”,或者查询计划调用的模块的第一个项目是“Read master map”,则查询的第一个映射是主映射,而不是索引映射。 因为主映射读取数据本身,而不是数据索引,这总是表明查询计划效率低下。

0
0 177
问题 fajie xie · 四月 23, 2021

服务器操作系统频繁产生错误日志“生成了一个严重警告并将其发送到远程终结点。这会导致连接终止。TLS 协议所定义的严重错误代码是 10。Windows SChannel 错误状态是 10。” 想请问一下,这个错误信息是我们产品导致产生的问题吗?

1
0 373
文章 姚 鑫 · 四月 22, 2021 8m read

第五章 优化查询性能(一)

InterSystems SQL自动使用查询优化器创建在大多数情况下提供最佳查询性能的查询计划。该优化器在许多方面提高了查询性能,包括确定要使用哪些索引、确定多个AND条件的求值顺序、在执行多个联接时确定表的顺序,以及许多其他优化操作。可以在查询的FROM子句中向此优化器提供“提示”。本章介绍可用于评估查询计划和修改InterSystems SQL将如何优化特定查询的工具。

InterSystems IRIS®Data Platform支持以下优化SQL查询的工具:

  • SQL Runtime Statistics用于生成查询执行的运行时性能统计信息
  • 索引分析器,用于显示当前命名空间中所有查询的各种索引分析器报告。这显示了InterSystems SQL将如何执行查询,可以全面了解索引是如何使用的。此索引分析可能表明应该添加一个或多个索引以提高性能。
  • 查询执行计划:显示SQL查询(查询计划)的最佳(默认)执行计划,并可选地显示该SQL查询的备用查询计划以及统计信息。用于显示查询计划的工具包括SQL EXPLAIN命令、$SYSTEM.SQL.ExPlan()方法以及管理门户和SQL Shell中的各种Show Plan工具。查询计划和统计数据是在准备查询时生成的,不需要执行查询。
0
0 242
文章 姚 鑫 · 四月 21, 2021 13m read

第四章 缓存查询(二)

运行时计划选择

运行时计划选择(RTPC)是一个配置选项,它允许SQL优化器利用运行时(查询执行时)的离群值信息。运行时计划选择是系统范围的SQL配置选项。

RTPC被激活时,准备查询包括检测查询是否包含具有离群值的字段上的条件。如果PREPARE检测到一个或多个异常值字段条件,则不会将查询发送到优化器。相反,SQL会生成一个运行时计划选择存根。在执行时,优化器使用此存根选择要执行的查询计划:忽略离群值状态的标准查询计划,或针对离群值状态进行优化的替代查询计划。如果有多个异常值条件,优化器可以从多个备选运行时查询计划中进行选择。

  • 准备查询时,SQL将确定它是否包含离群值字段条件。如果是这样,它将推迟选择查询计划,直到执行查询。在准备时,它创建一条标准SQL语句和(对于动态SQL)相应的缓存查询,但将选择是使用此查询计划还是创建不同的查询计划,直到查询执行。在准备时,它创建看起来像是标准SQL语句的内容,如下所示:DECLARE QRS CURSOR FOR SELECT Top ? Name,HaveContactInfo FROM Sample.MyTest WHERE HaveContactInfo=?,用问号表示文字替代变量。
0
0 234
文章 Claire Zheng · 四月 21, 2021 1m read

在医院信息化建设中,如何打通医院的各个系统,给患者提供连续、无缝的良好体验,集成平台发挥着重要作用。而集成平台方案如何适应现在的多云时代、需要具备什么样的特性、如何与多云环境更好地结合以便为医院的信息化建设带来更多的便利?面对这一系列问题,InterSystems中国业务拓展经理李岩为您解读InterSystems集成平台方案的特点和优势,以及构建在VMware云方案上的最佳实践,让您了解云环境下集成平台方案的新特性和优势。

0
0 191
问题 Michael Lei · 四月 21, 2021

有人有将NonStop SQLMP与IRIS连接的经验吗?

如果可能的话,我需要一些参考或技巧,实际上是与JDBC驱动程序连接的,以便互连并解决许多各种各样的问题,例如:

一些查询(不是很多)有空获取,可以正常工作,但没有要获取的内容,而且确定Select 语句是正确的。

1
0 208
问题 Michael Lei · 四月 21, 2021

我对EnsLib.HTTP.GenericOperation类进行了操作。此操作发送以下json消息:

{ "resourceType":"Bundle", "id":"ec5ffdbe-3739-47e6-81e4-2b0498e99fb8", "meta":[ { "lastUpdated":"2020-09-20T15:04:17.764+02:00" }], "type":"searchset", "total":"1", "link":[ { "relation":"self", "url":"https:\/\/xxx:5665\/api\/fhir\/DSTU3\/CarePlan?

1
0 274
问题 Michael Lei · 四月 21, 2021

大家好,

我正在创建WS做服务器用,但是当我要求WSDL时,提示错误因为找不到类。
我添加了以下说明:

set ^SYS("Security","CSP","AllowClass","MiProyecto.MiClaseWS","%SOAP.WebServiceInfo")=1 
set ^SYS("Security","CSP","AllowClass","MiProyecto.MiClaseWS","%SOAP.WebServiceInvoke")=1

我已经在WS安全配置中创建了一个入口

在“应用程序角色”选项卡中,我配置了%All权限

(图像中的命名空间“Samples”是出于安全原因)

如果我以以下方式调用服务,则http:// localhost:57772 / myproject / ws / MyProject.MiClassWS.cls? WSDL提示以下错误:

Not Found
The requested URL /miproyecto/ws/MiProyecto.MiClaseWS.cls was not found on this server.

但是,另一方面,如果我执行以下命令,它可以正常工作: https:// localhost:57772 / csp / sample / MiProyecto.MiClaseWS.cls?wsdl

1
0 399
文章 姚 鑫 · 四月 20, 2021 13m read

第四章 缓存查询(一)

系统自动维护已准备好的SQL语句(“查询”)的缓存。这允许重新执行SQL查询,而无需重复优化查询和开发查询计划的开销。缓存查询是在准备某些SQL语句时创建的。准备查询发生在运行时,而不是在编译包含SQL查询代码的例程时。通常,PREPARE紧跟在SQL语句的第一次执行之后,但在动态SQL中,可以准备查询而不执行它。后续执行会忽略PREPARE语句,转而访问缓存的查询。要强制对现有查询进行新的准备,必须清除缓存的查询。

所有SQL调用都会创建缓存查询,无论是在ObjectScript例程中调用还是在类方法中调用。

  • 动态SQL、ODBC、JDBC和$SYSTEM.SQL.DDLImport()方法在准备查询时创建缓存查询。管理门户执行SQL接口、InterSystems SQL Shell和%SYSTEM.SQL.Execute()方法使用动态SQL,因此使用准备操作来创建缓存查询。

它们列在命名空间(或指定方案)的Management Portal常规缓存查询列表、每个正在访问的表的Management Portal Catalog Details缓存查询列表以及SQL语句列表中。动态SQL遵循本章中介绍的缓存查询命名约定。

  • 类查询在准备(%PrepareClassQuery()方法)或第一次执行(调用)时创建缓存查询。
0
1 383
文章 姚 鑫 · 四月 19, 2021 11m read

第三章 优化表(二)

调整表计算值

调优表操作根据表中的代表性数据计算和设置表统计信息:

  • ExtentSize,它可能是表中的实际行数(行数),也可能不是。
  • 表中每个属性(字段)的选择性。 可以选择性地阻止单个属性的选择性计算。
  • 属性的离群选择性,其中一个值比其他值出现得更普遍。 有效的查询可以利用离群值优化。
  • 标识某些属性特征的每个属性的注释。
  • 每个属性的平均字段大小。
  • 表的SQL Map NameBlockCountSource of BlockCount

区段大小和行计数

从管理门户运行Tune Table工具时,ExtentSize是表中当前行的实际计数。默认情况下,GatherTableStats()方法还将实际行数用作ExtentSize。当表包含大量行时,最好对较少的行执行分析。可以使用SQL tune table命令并指定%SAMPLE_PERCENT来仅对总行的一定百分比执行分析。在针对包含大量行的表运行时,可以使用此选项来提高性能。此%SAMPLE_PERCENT值应该足够大,以便对代表性数据进行采样。如果ExtentSize<1000`,则无论`%SAMPLE_PERCENT`值如何,TUNE TABLE都会分析所有行。 指定的`ExtentSize`可以小于或大于实际行数。但是,`ExtentSize`不应显著超过当前表数据中的实际行数。

0
0 200
公告 Claire Zheng · 四月 18, 2021

Hi 亲爱的社区开发者们,福利来了!

在Global Masters,我们为 Expert, Ambassador and VIP levels(专家级、大使级和VIP级)的用户提供了更多奖励!

Apple AirPods

希望你们喜欢新奖品!

此外,你可以在奖励列表中看到"解锁获奖" 项目,根据提示完成相应目标后,便可解锁并申请奖品。

2
0 286
文章 Hao Ma · 四月 18, 2021 5m read

IRIS相比Caché在部署上的一个进步是支持docker。即便不是云部署, 使用docker也带来非常多的便利。 尤其是在开发测试环节,由于docker的使用更便捷,除非要模拟客户的环境或者做规定的性能测试,我在测试中基本已经不再使用本机的实例或者虚机。IRIS的联机文档有详细的IRIS docker安装使用指导,本文只是一个简单的,快速上手的在测试环境安装IRIS docker的简单步骤,尤其适合初学者。

注意Windows上docker可能会遇到这样那样的问题,因此通常还是推荐在Linux或者Mac OS上使用。正式的生产环境的IRIS docker container也是不支持Windows系统的。

Referrence

##1. 在操作系统上安装Docker环境

Docker官方文档的安装步骤非常清晰,我按照上面的步骤在MAC和CentOS上安装docker从来没有出现过问题。

0
1 903
文章 姚 鑫 · 四月 18, 2021 13m read

第三章 优化表(一)

要确保InterSystems IRIS®Data Platform上的InterSystems SQL表的最高性能,可以执行多种操作。优化可以对针对该表运行的任何查询产生重大影响。本章讨论以下性能优化注意事项:

  • ExtentSizeSelectiveBlockCount用于在用数据填充表之前指定表数据估计;此元数据用于优化未来的查询。
  • 运行tune Table来分析填充表中的代表表数据;生成的元数据用于优化未来的查询。
  • 优化表计算的值包括扩展大小、选择性、异常值选择性、平均字段大小和块计数
  • 导出和重新导入优选表统计数据

扩展大小、选择性和块数(ExtentSize, Selectivity, and BlockCount)

当查询优化器决定执行特定SQL查询的最有效方式时,它会考虑以下三种情况:

  • 查询中使用的每个表的ExtentSize行计数。
  • Selectivity为查询使用的每列计算的DISTINCT值的百分比。
  • 查询使用的每个SQL映射的块计数。

为了确保查询优化器能够做出正确的决策,正确设置这些值非常重要。

  • 在用数据填充表之前,可以在类(表)定义期间显式设置这些统计信息中的任何一个。
  • 在用代表性数据填充表之后,可以运行tune Table来计算这些统计数据。
  • 运行TuneTable之后,可以通过指定显式值来覆盖计算的统计信息。
0
0 283