搜索​​​​

清除过滤器
文章
Claire Zheng · 五月 11, 2023

【视频】InterSystems 2023CHITEC之旅完美收官!

2023年4月14日-16日,2023 CHITEC在合肥圆满举办!此次盛会期间,创新的数据技术提供商InterSystems通过展位展示、主题研讨会、分论坛演讲等方式,全方位多角度展示了“加速评测,助力公立医院高效建设互联互通平台和数据中心”的能力,吸引了众多参会嘉宾。
公告
Claire Zheng · 二月 6, 2023

【投票时间】InterSystems 开发者竞赛:工具(Tools)

Hey 开发者们, 投票周开始了! 在我们的 InterSystems 开发者竞赛:Tool(工具)中,来为你最欣赏的应用投上一票吧! 🔥 投票选出最佳应用程序 🔥 如何投票?详情如下。 Experts nomination(专家提名) InterSystems经验丰富的专家评审团将选出最好的应用程序,在Experts nomination(专家提名)中提名奖项。 有请InterSystems专家: ⭐️ @Alexander.Koblov,支持专家⭐️ @Guillaume.Rongier7183,销售工程师⭐️ @Eduard.Lebedyuk,高级云工程师⭐️ @Steve.Pisani,高级解决方案架构师⭐️ @Timothy.Leavitt,开发经理⭐️ @Evgeny.Shvarov,开发者生态系统经理⭐️ @Dean.Andrews2971,开发者关系主管 Community nomination(社区提名) 每一个用户来说,你投出的每一票的分数,是根据下面两类中最高的分数来计: 条件 奖项排名 第一名 第二名 第三名 您在社区发布了一篇文章并将应用程序上传到 Open Exchange (OEX) 9 6 3 您在社区发布了至少 1 篇文章或将 1 个应用程序上传到 OEX 6 4 2 您对 DC 做出任何有效贡献(发表评论/问题等) 3 2 1 等级 奖项排名 第一名 第二名 第三名 Global Masters 的 VIP 级别 或 InterSystems 产品经理 15 10 5 Global Masters 的 Ambassador级别 12 8 4 Global Masters的Expert 级别或开发者社区版主 9 6 3 Global Masters的Specialist级别 6 4 2 Global Masters的Advocate级别,或 InterSystems员工 3 2 1 Blind vote! 每个应用获得的投票数将对所有人不可见。我们会每天在这个帖子(英文原帖)的评论区发布一次排行榜。 在竞赛页面,提交时间越早,在列表中的排名就靠前。 P.S. 不要忘记订阅本文(请订阅英文原帖),点击铃铛图标,即可收到最新“排行榜”评论。 在参与投票前,您需要: 登录 Open Exchange – 使用开发者社区账号即可。 在社区内进行有效贡献 ——回答问题、发帖、在Open Exchange发布新应用等等都可以,然后你的账号才可以参与投票。点击查看本帖 ,了解如何更好地成为有效的社区贡献者! 投票期间,如果你改了主意,可以随时将票改投给其他项目。 来支持你喜欢的项目吧! 注意:在投票期间,参赛者可以继续修复bug,提升应用,所以投票者不要错过最新发布的版本哦~ 截至2月7日的投票结果分享- Since the beginning of the voting we have the results: Expert Nomination, Top 5 OpenAPI-Suite by @Lorenzo Scalese irissqlcli by @Dmitry Maslennikov iris-tripleslash by @Henry Pereira Intersystems IRIS platform queue trend monitoring component by @Yubo Mao message_key_query by @王喆 ➡️ Voting is here. Community Nomination, Top 5 Intersystems IRIS platform queue trend monitoring component by @Yubo Mao iris-tripleslash by @Henry Pereira message_key_query by @王喆 DX Jetpack for VS Code by @John Murray OpenAPI-Suite by @Lorenzo Scalese ➡️ Voting is here. So, the voting continues. Please support the application you like! Please check out today's voting results: Expert Nomination, Top 5 irissqlcli by @Dmitry Maslennikov OpenAPI-Suite by @Lorenzo Scalese iris-geo-map by @Muhammad Waseem iris-tripleslash by @Henry Pereira iris-log-viewer by @Oliver Wilms ➡️ Voting is here. Community Nomination, Top 5 iris-tripleslash by @Henry Pereira Intersystems IRIS platform queue trend monitoring component by @Yubo Mao irissqlcli by @Dmitry Maslennikov OpenAPI-Suite by @Lorenzo Scalese message_key_query by @王喆 ➡️ Voting is here.
文章
Weiwei Gu · 十二月 1, 2022

InterSystems 几款主要产品的功能对比清单(Cache/Ensemble vs. IRIS For Health / Health Connect )

InterSystems 是一家已经深耕数据库平台领域达44年的公司,成立于1978年,现在已经在全球的80多个国家开展相关业务,每天有超过10亿患者的电子病历数据都跑在以我们的数据库平台构建的应用系统之上。 我们的客户遍布国内外,国内的大几百家三甲医院客户,中国复旦排行榜上超过1/3的顶级医院都在使用我们产品(包括北京协和医院,华西医院,湘雅等等),我们的技术合作伙伴,如东华医为,嘉和,和仁等也都是国内医疗信息领域的著名厂商。 而在国外,我们也有非常多的顶级客户,仅仅以美国举例,美国最顶级的排名前20的所有医院,无一例外全部都是使用的interSystems公司的数据库平台产品。 美国排名前20的所有顶级医院 2020-2021《美国新闻与世界报道》(U.S. News & World Report)最顶级医院名单(前20家医疗机构)均应用InterSystems公司的数据库平台: Mayo Clinic, Rochester, Minnesota (明尼苏达州罗彻斯特市梅奥诊所)Cleveland Clinic(克利夫兰诊所) Johns Hopkins Hospital, Baltimore(巴尔的摩约翰霍普金斯医院)(tie). New York-Presbyterian Hospital-Columbia and Cornell, New York(纽约长老会医院 ) (tie). UCLA Medical Center, Los Angeles(加州大学洛彬矶分校医学中心)Massachusetts General Hospital, Boston(波士顿麻省总医院 )Cedars-Sinai Medical Center, Los Angeles(洛杉矶Cedars-Sinai医疗中心 )UCSF Medical Center, San Francisco(旧金山加州大学旧金山分校医疗中心 )NYU Langone Hospitals, New York(纽约大学朗格尼医学中心)Northwestern Memorial Hospital, Chicago(芝加哥西北纪念医院)University of Michigan Hospitals-Michigan Medicine, Ann Arbor(安娜堡密歇根大学医学院)Brigham and Women’s Hospital, Boston(波士顿哈佛医学院教学附属医院布列根和妇女医院)Stanford Health Care-Stanford Hospital, Stanford, California(斯坦福医疗中心)Mount Sinai Hospital, New York(纽约西奈山医院)Hospitals of the University of Pennsylvania-Penn Presbyterian, Philadelphia(费城宾夕法尼亚大学-宾夕法尼亚长老会医院)Mayo Clinic-Phoenix(凤凰城梅奥诊所)Rush University Medical Center, Chicago(芝加哥拉什大学医学中心)(tie). Barnes-Jewish Hospital, St. Louis(圣路易斯巴恩斯医院)(tie). Keck Hospital of USC, Los Angeles(洛杉矶南加州大学凯克医院)Houston Methodist Hospital(休斯顿卫理公会医院) InterSystems 公司久负盛名的两款产品: Cache 与 Ensemble , 以其稳定性好,速度快著称,在国内外均有无数医院用户。 自2018年底InterSystems 公司推出其新一代的 IRIS for Health 数据库平台后,基于新产品更高的性能表现及更强大的功能与扩展能力,我们鼓励所有的Cache 及Ensemble 老用户逐渐向最新一代的IRIS 以及Health Connect 平台迁移。以获得更好的性能及用户体验,并且在未来可以支撑更多新的发展需求。 Cache 与 Ensemble 的最新版本也止于2018年,未来我们将继续对使用这两款产品的客户提供支持服务,但不会在其之上开发新的功能。 以下附件中,提供了截止目前这两款产品Cache / Ensemble 与其新的下一代的产品 IRIS for Health / Health Connect 的功能清单对比,可点击参考:
文章
Michael Lei · 五月 12, 2021

InterSystems 最佳实践系列之数据平台和性能 – 第 9 篇 InterSystems IRIS VMware 最佳实践指南

本贴提供了在 VMware ESXi 5.5 及更高版本的环境中部署 Caché 2015 及更高版本时,关于配置、系统规模调整和容量规划等方面的指南。 我假定您已经了解 VMware vSphere 虚拟化平台,所以直接给出推荐。 本指南中的推荐不特定于任何具体硬件或站点特定的实现,也不应作为规划和配置 vSphere 部署的全面指南,而是一份您可以做出选择的最佳实践配置清单。 我希望您的 VMware 专家实施团队能针对具体站点对这些推荐进行评估。 [这里是 InterSystems 数据平台和性能系列的其他帖子的列表。](https://cn.community.intersystems.com/post/intersystems-数据平台的容量规划和性能系列文章) _注:_本帖更新于 2017 年 1 月 3 日,强调必须为生产数据库实例设置虚拟机内存预留,以保证 Caché 有足够内存可用,并且不会出现内存交换或膨胀而对数据库性能产生负面影响。 更多详细信息,请参见下面的*内存*部分。 ### 参考 本文中的信息基于经验和对公开的 VMware 知识库文章及 VMware 文档(例如 [VMware vSphere 性能最佳实践](https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/techpaper/performance/vsphere-esxi-vcenter-server-67-performance-best-practices.pdf))的研究以及对 Caché 数据库部署要求的反映。 ## ESXi 支持 InterSystems 的产品吗? 针对处理器类型和操作系统(包括虚拟化操作系统)验证和发布 InterSystems 产品是 InterSystems 的策略和程序。 有关详情,请参见 [InterSystems 支持策略](http://www.intersystems.com/services-support/product-support/virtualization/)和[版本信息](http://www.intersystems.com/services-support/product-support/latest-platform/)。 > 例如,在 x86 主机上的 ESXi 中,支持在 Red Hat 7.2 操作系统上运行 Caché 2016.1。 注:如果您不编写自己的应用程序,还必须检查应用程序供应商支持策略。 ### 支持的硬件 在配合使用当前服务器和存储组件的情况下,VMware 虚拟化很适合 Caché。 使用 VMware 虚拟化的 Caché 已在客户站点成功部署,并且性能和可伸缩性已在基准测试中得到验证。 在配置正确的存储、网络和搭载较新型号的英特尔至强处理器(具体为英特尔至强 5500、5600、7500、E7 系列和 E5 系列,包括最新的 E5 v4)的服务器上使用 VMware 虚拟化不会对性能产生明显影响。 通常,Caché 和应用程序在客户机操作系统上的安装和配置方式与裸机操作系统上的安装和配置方式相同。 客户有责任查看 [VMware 兼容性指南](http://www.vmware.com/resources/compatibility/search.php),以了解所使用的特定服务器和存储。 # 虚拟化架构 VMware 常用于 Caché 应用程序的两种标准配置: - 主生产数据库操作系统实例在“裸机”集群上,而 VMware 只用于其他生产和非生产实例,如 Web 服务器、打印、测试、训练等。 - 所有操作系统实例(包括主生产实例)均已虚拟化。 本帖可用作任一方案的指南,不过重点是第二个方案,即包括生产实例在内的所有操作系统实例均已虚拟化。 下图显示了该配置的典型物理服务器设置。 _图 1. 简单的虚拟化 Caché 架构_ 图 1 显示了一个常见的包含至少三台物理主机服务器的部署,可通过 VMware HA 集群中的主机服务器提供 N+1 容量和可用性。 要扩展资源,可能要向集群添加额外的物理服务器。 备份/还原媒体管理和灾难恢复也可能需要额外的物理服务器。 有关特定于 _VMware vSAN_、VMware 的超融合基础架构解决方案的推荐,请参见以下帖子:[第 8 部分 超融合基础架构容量和性能规划](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-part-8-hyper-converged-infrastructure-capacity)。 本贴中的大部分推荐可以应用于 vSAN,除了下面的“存储”部分有一些明显差异。 # VMWare 版本 下表给出了针对 Caché 2015 及更高版本的主要推荐: vSphere 是包括 vCenter Server 在内的产品套件,允许通过 vSphere 客户端对主机和虚拟机进行集中系统管理。 > 本帖假定将使用 vSphere,而不是“免费的”ESXi Hypervisor 单独版本。 VMware 有多种授权模式;最终选择取决于哪个模式最适合您当前和将来的基础架构规划。 我通常推荐“企业版”,因为它增加了功能,例如让硬件得到更有效利用的动态资源调度 (DRS),以及用于存储阵列整合(快照备份)的存储 API。 VMware 网站给出了版本比较。 还有高级套件,允许捆绑 vSphere 的 vCenter Server 和 CPU 许可证。 套件有升级限制,因此通常只推荐给不期望增长的小型站点。 # ESXi 主机 BIOS 设置 ESXi 主机是物理服务器。 在配置 BIOS 前,您应该: - 向硬件供应商核实服务器是否正在运行最新的 BIOS - 检查是否有服务器/CPU 型号特定的 BIOS 设置专门用于 VMware。 服务器 BIOS 的默认设置对于 VMware 可能不是最佳设置。 以下设置可以用来优化物理主机服务器以获得最佳性能。 并非下表中的所有设置在所有供应商的服务器上都可用。 # 内存 内存分配应考虑以下关键规则: 在单台物理主机上运行多个 Caché 实例或其他应用程序时,VMware 有多种技术可以实现高效的内存管理,如透明页共享 (TPS)、膨胀、交换和内存压缩。 例如,当多个操作系统实例在同一主机上运行时,TPS 可去除内存页的冗余副本,从而允许内存过载而不会降低性能,这使得虚拟机运行所占用的内存少于物理机所需内存。 > 注:必须在操作系统中安装 VMware Tools,才能利用 VMware 的这些功能和许多其他功能。 虽然这些功能的存在是为了允许内存过载,但建议务必先调整所有虚拟机的 vRAM 大小,以适应可用的物理内存。 在生产环境中,尤其重要的是要仔细考虑内存过载的影响,只有在收集数据以确定可能的过载量后,才能进行内存过载。 要确定给定 Caché 实例的内存共享有效性和可接受的过载程度,请运行工作负载并使用 Vmware 命令 `resxtop` 或 `esxtop` 来观察实际的内存节省情况。 在规划 Caché 实例内存要求时,建议回顾一下[本系列中关于内存的第四个帖子](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-part-4-looking-memory)。 尤其是“VMware 虚拟化注意事项”部分,其中的重点是: > 在生产系统上设置 VMware 内存预留。 您想要*必须*避免任何共享内存交换,所以将生产数据库虚拟机内存预留设置为至少是 Caché 共享内存的大小加上 Caché 进程和操作系统及内核服务的内存。 如果有疑虑,则**预留整个生产数据库虚拟机内存(100% 预留)**,以保证 Caché 实例有足够内存可用,这样就不会出现内存交换或膨胀而对数据库性能产生负面影响。 注:较大的内存预留将影响 vMotion 运行,因此在设计 vMotion/管理网络时必须考虑到这一点。 只有目标主机的可用物理内存大于或等于预留内存的大小时,才能使用 Vmware HA 实时迁移虚拟机或在另一台主机上启动虚拟机。 这对于 Caché 生产虚拟机特别重要。 例如,要特别注意 HA 准入控制策略。 > 确保容量规划允许在 HA 发生故障转移时分配虚拟机。 对于非生产环境(测试、训练等),可以应用更积极的内存过载,但不要让 Caché 共享内存过载,而是通过减少全局缓冲区来限制 Caché 实例的共享内存。 当前的英特尔处理器架构具有 NUMA 拓扑。 处理器有自己的本地内存,并且可以访问同一主机中其他处理器上的内存。 毫无疑问,访问本地内存的延迟要低于远程内存。 有关 CPU 的讨论,请查看[本系列的第三个帖子](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-part-3-focus-cpu),_评论部分_中包括了关于 NUMA 的讨论。 如上面的 BIOS 部分所述,实现最佳性能的策略是,在理想情况下,将虚拟机规模调整为只达到单个处理器支持的最大核心数和内存量。 例如,如果容量规划显示最大的生产 Caché 数据库虚拟机将具有 14 个 vCPU 和 112 GB 内存,则考虑具有 2 个 E5-2680 v4(14 核处理器)和 256 GB 内存的服务器集群是否合适。 > **理想情况下**,调整虚拟机规模以使内存在 NUMA 节点本地。 但不要太过执着于此。 如果需要一个比 NUMA 节点大的“怪兽虚拟机”,那也没问题,VMware 将管理 NUMA 以获得最佳性能。 合理调整虚拟机的规模并且分配的资源不超过所需资源也很重要(参见下文)。 ## CPU 虚拟 CPU 分配应考虑以下关键规则: Caché 生产系统的规模应根据实际客户站点的基准测试和测量结果来确定。 对于生产系统,使用一开始就将系统规模调整为与裸机 CPU 核心数相同的策略,并根据最佳实践进行监测,看是否可以减少虚拟 CPU (vCPU)。 ### 超线程和容量规划 根据物理服务器的规则调整__生产数据库__虚拟机规模的一个良好起点是,针对启用了超线程功能的目标处理器计算物理服务器 CPU 要求,然后简单地进行转换: > 一个物理 CPU(包括超线程)= 一个 vCPU(包括超线程)。 一个常见的误解是,超线程以某种方式使 vCPU 容量增加了一倍。 这对于物理服务器或逻辑 vCPU 来说并不正确。 裸机服务器上的超线程可能会比没有超线程的相同服务器提升 30% 的性能,但这也会根据应用情况的不同而有所不同。 对于初始规模调整,假定 vCPU 具有完整的内核专用资源。 例如,如果您有一台 32 核(2 个 16 核)E5-2683 V4 服务器 – 总共多达 32 个 vCPU 的容量规模,且可能还有余量。 此配置假定在主机级别启用了超线程。 VMware 将管理主机上所有应用程序和虚拟机之间的调度。 在您花时间监测应用程序、操作系统和 VMware 在峰值处理期间的性能后,您可以决定是否进行更高度的整合。 ### 授权 在 vSphere 中,可以为虚拟机配置一定数量的插槽或核心。 例如,如果有一个双处理器虚拟机(2 个 vCPU),则可以将其配置为两个 CPU 插槽,或一个具有两个 CPU 核心的插槽。 从执行的角度看,并没有多大区别,因为虚拟机监控程序将最终决定虚拟机是在一个还是两个物理插槽上执行。 但是,指定双 CPU 虚拟机实际有两个核心而不是两个插槽,会对软件许可证产生影响。 注:Caché 许可证以核心数为准(而非线程数)。 # 存储 > 本部分适用于更为传统的使用共享存储阵列的存储模型。 有关 _vSAN_ 的建议,另请参见以下帖子:[第 8 部分 超融合基础架构容量和性能规划](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-part-8-hyper-converged-infrastructure-capacity) 对于存储,应考虑以下关键规则: ## 针对性能调整存储大小 存储瓶颈是影响 Caché 系统性能的最常见问题之一,对于 VMware vSphere 配置也是如此。 最常见的问题是简单地按 GB 容量来调整存储大小,而不是分配足够多的磁盘主轴来支持预期的 IOPS。 在 VMware 中,存储问题可能更加严重,因为可能有更多主机通过相同的物理连接访问同一存储。 ## VMware 存储概述 VMware 存储虚拟化可以分为三层,例如: - 存储阵列是底层,由物理磁盘组成,以逻辑磁盘(存储阵列卷或 LUN)的形式呈现给上面的层。 - 下一层是 vSphere 占用的虚拟环境。 存储阵列 LUN 以数据存储的形式呈现给 ESXi 主机,并格式化为 VMFS 卷。 - 虚拟机由数据存储中的文件组成,所包含的虚拟磁盘以磁盘的形式呈现给客户机操作系统,可以对这些磁盘进行分区并在文件系统中使用。 VMware 为管理虚拟机中的磁盘访问提供了两种选择 — VMware 虚拟机文件系统 (VMFS) 和原始设备映射 (RDM),两者的性能相似。 为了简化管理,VMware 通常推荐 VMFS,但在某些情况下可能需要 RDM。 作为一般建议 – 除非有特别的理由使用 RDM,否则请选择 VMFS,_VMware 的新开发针对 VMFS 而非 RDM_。 ### 虚拟机文件系统 (VMFS) VMFS 是 VMware 开发的一种文件系统,专门针对集群虚拟环境(允许从多个主机进行读/写访问)和大型文件存储进行优化。 VMFS 的结构使虚拟机文件可以存储在一个文件夹中,从而简化了虚拟机管理。 VMFS 还支持 vMotion、DRS 和 VMware HA 等 VMware 基础架构服务。 操作系统、应用程序和数据存储在虚拟磁盘文件(.vmdk 文件)中。 vmdk 文件存储在数据存储中。 一个虚拟机可以由分布在几个数据存储上的多个 vmdk 文件组成。 如下图中的生产虚拟机所示,一个虚拟机可以包括分布在多个数据存储上的存储。 对于生产系统,每个 LUN 使用一个 vmdk 文件可实现最佳性能,对于非生产系统(测试、训练等),多个虚拟机 vmdk 文件可以共享一个数据存储和一个 LUN。 虽然 vSphere 5.5 支持的最大 VMFS 卷大小为 64TB,VMDK 大小为 62TB,但在部署 Caché 时,通常使用映射到不同磁盘组上的 LUN 的多个 VMFS 卷来分离 IO 模式并提高性能。 例如,随机或顺序 IO 磁盘组,或者将生产 IO 与其他环境的 IO 分开。 下图显示了与 Caché 一起使用的 VMware VMFS 存储示例的概览: _图 2. VMFS 上的 Caché 存储示例_ ### RDM RDM 允许将原始 SCSI 磁盘或 LUN 作为 VMFS 文件来进行管理和访问。 RDM 是 VMFS 卷上的特殊文件,用作原始设备的代理。 对于大多数虚拟磁盘存储,推荐使用 VMFS,但在某些情况下可能需要使用原始磁盘。 RDM 仅适用于光纤通道或 iSCSI 存储。 ### 用于阵列集成的 VMware vStorage API (VAAI) 为获得最佳存储性能,客户应考虑使用支持 VAAI 的存储硬件。 VAAI 可以在几个方面(包括虚拟机置备和精简置备的虚拟磁盘)提高性能。 对于较旧的阵列,可以向阵列供应商索取固件更新来支持 VAAI。 ### 虚拟磁盘类型 ESXi 支持多种虚拟磁盘类型: **厚置备** – 在创建时分配空间。 进一步分为: - 快速置零 – 将 0 写入整个驱动器。 这会增加创建磁盘所需的时间,但可获得最佳性能,即使是第一次写入每个块。 - 延迟置零 – 首次写入每个块时写入 0。 延迟置零缩短了创建时间,但第一次写入块时会使性能降低。 不过,后续写入的性能与快速置零的厚磁盘相同。 **精简置备** – 在写入时分配空间并置零。 对未写入的文件块进行第一次写入时,会有较高的 I/O 成本(类似于延迟置零的厚磁盘),但在随后写入精简置备的磁盘时,性能与快速置零的厚磁盘相同。 _在所有磁盘类型中,VAAI 都可以通过将操作卸载到存储阵列来提高性能。_某些阵列还在阵列级别支持精简置备,请勿在精简置备的阵列存储上精简置备 ESXi 磁盘,因为置备和管理可能存在冲突。 ### 其他备注 如上文所述,为了符合最佳实践,请使用与裸机配置相同的策略;生产存储可以在阵列级别分成多个磁盘组: - 随机访问 Caché 生产数据库 - 顺序访问备份和日志,但也可以放置其他非生产存储,如测试、训练等 请记住,数据存储是存储层的抽象表示,因此,它是存储的逻辑表示而不是物理表示。 创建专门的数据存储以隔离特定的 I/O工作负载(无论是日志还是数据库文件),并且不隔离物理存储层,并不会对性能产生预期的影响。 虽然性能是关键,但共享存储的选择更多取决于站点现有或计划的基础架构,其次才是 VMware 的影响。 与裸机实现一样,FC SAN 的性能最好,推荐使用。 对于 FC,建议至少使用 8Gbps 的适配器。 只有在适当的网络基础架构到位的情况下,才能支持 iSCSI 存储,这包括:服务器和存储之间的网络中的所有组件上都必须支持至少 10Gb 的以太网和巨型帧 (MTU 9000),并且与其他流量分开。 对于数据库虚拟机或具有高 I/O 负载的虚拟机,使用多个 VMware 准虚拟 SCSI (PVSCSI) 控制器。 PVSCSI 可以提高整体存储吞吐量,同时降低 CPU 利用率,从而带来显著效益。 通过使用多个 PVSCSI 控制器,可以在客户机操作系统内执行多个并行 I/O 操作。 此外,建议通过单独的虚拟 SCSI 控制器将日志 I/O 流量与数据库 I/O 流量分开。 作为最佳实践,您可以将一个控制器用于操作系统和交换,另一个控制器用于日志,另外一个或多个控制器用于数据库数据文件(取决于数据库数据文件的数量和大小)。 众所周知,对齐文件系统分区是针对数据库工作负载的存储最佳实践。 物理机和 VMware VMFS 分区上均对齐分区可以防止因 I/O 跨越磁道边界而导致的 I/O 性能下降。 VMware 测试结果显示,将 VMFS 分区与 64KB 磁道边界对齐,可降低延迟并提高吞吐量。 按照存储和操作系统供应商的建议,使用 vCenter 创建的 VMFS 分区应与 64KB 边界对齐。 # 网络 对于网络,应考虑以下关键规则: 如上文所述,VMXNET 适配器比默认的 E1000 适配器具有更好的性能。 VMXNET3 允许 10Gb,并且使用更少的 CPU,而 E1000 只支持 1Gb。 如果各主机之间只有 1 Gb 的网络连接,那么客户端与虚拟机的通信不会有太大变化。 但是,VMXNET3 将允许同一主机上的虚拟机之间建立 10Gb 网络连接,这确实会带来改变,特别是在多层部署或者实例之间有高网络 IO 要求的情况下。 在计划关联性和反关联性 DRS 规则以将虚拟机保持在相同或不同的虚拟交换机上时,也应考虑此功能。 E1000 使用可用于 Windows 或 Linux 的通用驱动程序。 在客户机操作系统上安装 VMware Tools 之后,即可安装 VMXNET 虚拟适配器。 下图显示了一个典型的具有四个物理网卡端口的小型服务器配置,在 VMware 中配置了两个端口用于基础架构流量:用于管理和 vMotion 的 dvSwitch0,两个端口用于 VM 使用的应用程序。 使用网卡绑定和负载平衡来实现最佳吞吐量和 HA。 _图 3. 典型的具有四个物理网卡端口的小型服务器配置。_ # 客户机操作系统 推荐如下: > 将 VMware Tools 加载到所有虚拟机操作系统中并保持该工具为最新是非常重要的。 VMware Tools 是一套实用工具,可增强虚拟机的客户机操作系统的性能,并改进对虚拟机的管理。 如果客户机操作系统中未安装 VMware Tools,则客户机性能会缺乏重要功能。 在所有 ESXi 主机上正确设置时间至关重要 - 这最终会影响客户机虚拟机。 虚拟机的默认设置是不将客户机的时间与主机同步 - 但在某些时候,客户机还是会与主机同步时间,并且如果超时,则已知会导致重大问题。 VMware 建议使用 NTP 而不是 VMware Tools 定期进行时间同步。 NTP 是行业标准,可确保客户机的计时准确。 可能需要开放防火墙 (UDP 123) 才能允许 NTP 流量。 # DNS 配置 如果 DNS 服务器托管在虚拟化基础架构上并且不可用,它会阻止 vCenter 解析主机名,使虚拟环境无法管理 - 然而虚拟机本身保持运行,没有问题。 # 高可用性 高可用性由 VMware vMotion、VMware Distributed Resource Scheduler (DRS) 和 VMware High Availability (HA) 等功能提供。 Caché 数据库镜像也可以用于增加正常运行时间。 为 Caché 生产系统设计 n+1 个物理主机是非常重要的。 在单个主机发生故障时,必须有足够的资源(例如 CPU 和内存)让其余主机上的所有虚拟机都能运行。 在服务器发生故障时,如果 VMware 无法在其余服务器上分配足够的 CPU 和内存资源,VMware HA 将不会在其余服务器上重新启动虚拟机。 ## vMotion vMotion 可以与 Caché 一起使用。 vMotion 允许以完全透明的方式将一个正常运行的虚拟机从一台 ESXi 主机服务器迁移到另一台。 虚拟机中运行的操作系统和 Caché 等应用程序没有服务中断。 使用 vMotion 进行迁移时,只有虚拟机的状态和内存(及其配置)会移动。 虚拟磁盘不需要移动;它保留在相同的共享存储位置。 虚拟机迁移后,它将在新的物理主机上运行。 vMotion 只能在共享存储架构(如共享 SAS 阵列、FC SAN 或 iSCSI)下工作。 由于 Caché 通常配置为使用大量共享内存,因此为 vMotion 提供充足的网络容量是非常重要的,1Gb 网络可能还可以,但也可能需要更高带宽,或者可以配置多网卡 vMotion。 ## DRS 分布式资源调度器 (DRS) 是一种通过在集群中的不同主机服务器之间共享工作负载来在生产环境中自动使用 vMotion 的方法。 DRS 还具有对虚拟机实例实施 QoS 的能力,通过阻止非生产虚拟机过度使用资源来保护生产虚拟机的资源。 DRS 会收集有关集群主机服务器使用情况的信息,并通过在集群的不同服务器之间分配虚拟机工作负载来优化资源。 这种迁移可以自动或手动进行。 ## Caché 数据库镜像 对于要求最高可用性的任务关键型一级 Caché 数据库应用实例,还应考虑使用 [InterSystems 同步数据库镜像](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GHA_mirror#GHA_mirror_set_bp_vm)。同时使用镜像的其他优势包括: - 最新数据的单独副本。 - 故障转移在数秒内完成(比先重启虚拟机再重启操作系统再恢复 Caché 要快)。 - 在应用程序/Caché 发生故障(VMware 未检测到)时进行故障转移。 # vCenter Appliance vCenter Server Appliance 是基于 Linux 的预配置虚拟机,针对 vCenter Server 和相关服务的运行进行了优化。 我一直建议拥有小型集群的站点使用 VMware vCenter Server Appliance 作为在 Windows 虚拟机上安装 vCenter Server 的替代方案。 在 vSphere 6.5 中,建议将该设备用于所有部署。 # 总结 本帖是在 VMware 上部署 Caché 时应考虑的关键最佳实践的综述。 这些最佳实践大多不是 Caché 独有的,而是可以应用于 VMware 上的其他一级业务关键型部署。 如果您有任何问题,请通过下面的评论告诉我。
文章
Claire Zheng · 九月 12, 2021

InterSystems发布InterSystems IRIS医疗版互联互通套件,加速医院互联互通平台建设

2021年9月13日,中国 北京—— 致力于帮助客户解决最关键的可扩展性、互操作性和速度问题的创新数据技术提供商InterSystems今日宣布在中国推出InterSystems IRIS医疗版互联互通套件,以满足医院信息化建设的标准化要求,促进业务协同,助力公立医院高效建设互联互通平台。 中国医院信息互联互通标准化成熟度测评工作自2012年启动以来,已成为医院信息化建设的重要抓手。2020年发布的最新版测评方案(《国家医疗健康信息医院信息互联互通标准化成熟度测评方案(2020年版)》)结合医疗健康信息化建设新需求、新技术应用情况,强化了分级管理机构职责,修订了测评流程,补充完善了测评指标,提升了测评方案的科学性和指导性。 凭借多年来深耕医疗信息化建设领域的丰富经验和强大的医疗数据平台,InterSystems结合新版测评标准,及时推出InterSystems IRIS医疗版互联互通套件,从安全管理、监控、数据管理、互联互通文档、互联互通服务、集成与交换六大方面入手,在满足测评标准化组件的基础上,提供最新版医院互联互通标准化成熟度测评规定的文档、监控、服务、Schema等组件,充分满足医院快速落地互联互通标准化成熟度测评涉及到的标准化改造需求。通过内置的模块化服务,InterSystems IRIS医疗版互联互通套件将有效缩短实施周期,加快互联互通平台建设。 InterSystems IRIS医疗版互联互通套件兼备高性能与稳定性,连续多年支持数百家大型公立医院海量数据稳定运行。 主流 PC 服务器单实例下,支持日消息吞吐量可高达27.64亿。截至2021年,InterSystems技术已助力一百余家医院通过四级及以上医院信息互联互通标准化成熟度评级。目前获评医院互联互通成熟度五级乙等评级的32家医院中,有10家均采用了InterSystems的技术和产品,某大型三甲医院日均处理数据在千万量级。 InterSystems IRIS医疗版互联互通套件包含先进的互操作技术,同时具备强大的创新功能,包括数据库管理、敏捷开发、 API 管理、FHIR资源仓库、分布式扩展、一体化机器学习、自适应分析等,全面支持医院持续开展数字化创新与应用。 InterSystems亚太区总经理卢侠亮表示:“作为一家服务中国医疗信息化市场超过20年的创新数据提供商,InterSystems致力于为中国用户提供卓越服务,此次发布的InterSystems IRIS医疗版互联互通套件专为中国用户打造,将更高效地为医疗机构标准化互联互通和信息共享提供技术保障。接下来,我们会一如既往地与本土合作伙伴和医疗机构紧密合作,将全球领先的医疗信息平台解决方案与中国市场需求相结合,为更多的医院数字化转型提供强大支持。” InterSystems将于2021年9月17日举办“InterSystems IRIS医疗版互联互通套件”线上发布会,会议详情如下,欢迎点击“此处”或扫描下方二维码报名。 目前已经可以回放,节前错过的小伙伴可以继续注册观看啦
公告
Claire Zheng · 一月 20, 2021

InterSystems IRIS支持基于ARM的AWS Graviton2处理器

去年,AWS推出了基于ARM架构的AWS Graviton处理器第一代Amazon EC2 A1实例。在2019年AWS re:Invent 大会上,亚马逊宣布了第二代AWS Graviton2处理器和相关的Amazon EC2 M6g实例。相比前一代基于Intel Xeon的M5实例,Amazon EC2 M6g实例的性价比提升幅度高达40%。基于AWS Gravity 2的M6g实例现已推出预览版,InterSystems借此机会利用InterSystems IRIS数据平台对其性能进行了评估。InterSystems很高兴地宣布,我们取得了令人印象深刻的结果,并在2020年实现支持基于ARM架构的AWS Graviton2处理器的Amazon EC2实例! 我们测试了两种不同的工作负载,它们代表着InterSystems IRIS客户群体的常见用例。第一个工作负载是基于InterSystems IRIS数据平台的金融应用程序的纯数据接收。第二个是基于InterSystems IRIS医疗版的医疗互操作性工作负载。我们对比了Amazon EC2 M6g和M5在每种工作负载下的性能表现。 工作负载#1:InterSystems IRIS数据平台上的数据接收吞吐量 我们测试了相同的工作负载,以便在InterSystems IRIS上模拟纽约证交所在两节点分片集群上运行的数据处理(下单/成交)。该基准测试比较了m5.2xlarge和基于AWS Graviton2的m6g.2xlarge Amazon EC2实例之间的性能表现。每个实例均具有8个vCPU和32GB RAM,唯一的配置差异是处理器和AMI操作系统镜像。所对比的系统配置具有相同的EBS卷、iops、VPC配置和IRIS参数(例如全局缓冲区),且均使用了InterSystems IRIS的预发布版本IRIS-2020.1.0L.188.0-lnxrharm64和IRIS-2020.1.0L.188.0-lnxrh64。 结果显示,m5.2xlarge系统平均每秒处理9.8万条记录,而m6g.2xlarge每秒处理大约12万条记录。在相同数量的vCPU上,后者的性能提高了20%以上! 工作负载#2:InterSystems IRIS 医疗版上的医疗互操作性吞吐量 我们测试了相同的工作负载,以便在InterSystems IRIS医疗版互操作性技术框架上模拟HL7消息接收、路由和转换。该基准测试对m5.2xlarge和m6g.2xlarge(均具有8个vCPU和32GB RAM)进行了比较。除处理器以外,二者其余配置完全相同,且均在InterSystems IRIS(2020.1)的预发布版本上进行测试。我们同样针对基于第一代AWS Graviton处理器的A1实例进行了测试,以展示AWS Graviton2在性能上的飞跃。结果如下: 左侧轴是衡量此工作负载性能的主要指标,即应用程序每秒处理的消息数。x轴表示基准驱动向应用程序传输的不断增加的消息。从左向右,应用的工作负载不断增加,首先将入站接口的数量增加到16个,然后在保持稳定的情况下增加每秒消息数量。上图中的列则表示在右侧轴上测得的CPU利用率,当CPU利用率接近100%时,可以看到每种实例的最大容量。 正如大家所看到的,基于AWS Graviton2的M6g实例是线性扩展,并且在高工作负载下明显优于M5实例。在相同的工作负载下,M6g实例保持较低的CPU利用率,并在M5实例达到CPU最大利用率后仍可以继续扩展。与相同大小的M5实例相比,M6g实例的消息吞吐量最终提高了约28%。AWS Graviton2处理器以显著优势胜出! 性价比 通过比较基于AWS Graviton2的M6g和相同大小的M5实例,可以发现前者除了明显的性能提升外,还具有价格优势——与当前的Amazon EC2 M5实例相比,Amazon EC2 M6g实例的成本降低了20%: m5.2xlarge按需:每小时0.384美元 m6g.2xlarge按需:每小时0.308美元 结论 InterSystems致力于为客户提供选择平台的自由。我们很高兴地看到,AWS Graviton2处理器将为InterSystems IRIS客户带来显著的性能提升,并为客户降低成本。我们相信这些综合优势将推动ARM平台在IRIS客户中的广泛应用,我们很高兴可以为此提供支持! 更多资源 https://aws.amazon.com/ec2/graviton/ https://aws.amazon.com/ec2/instance-types/m6/ https://www.intersystems.com/products/intersystems-iris/ 注:本文为译文,欢迎点击查看原文,原文由Steven LeBlanc撰写 @LU.WANG @na.liu 这个版本的IRIS 我们能发货吗?
文章
Hao Ma · 四月 28, 2023

IRIS, Caché监控指导 - 控制台日志和错误

这里只讨论Caché和IRIS本身产生的错误和警告。用户在维护工作中通常会需要更多的内容, 那些我们在后面的 “系统性能指标”里介绍。另外, 关于集成平台的告警和日志, 也会在后面单独讨论。集成平台,也就是Ensemble Production,是IRIS系统上运行的应用,它的日志,告警,以及指标,测量,是单独的内容。 ### 控制台日志 控制台日志是系统运行状态的日志文件,在IRIS里是messages.log, 在Cache‘里的名字是console.log,默认放在安装目录的mgr子目录。 用户也可以在管理门户的"系统操作>系统日志>控制台日志"里查看。以下是一个实际的例子: ``` *** Recovery started at Fri Jan 03 16:26:05 2020 Current default directory: c:\intersystems\hsap\mgr Log file directory: c:\intersystems\hsap\mgr\ WIJ file spec: c:\intersystems\hsap\mgr\CACHE.WIJ Recovering local (c:\intersystems\hsap\mgr\CACHE.WIJ) image journal file... Starting WIJ recovery for 'c:\intersystems\hsap\mgr\CACHE.WIJ'. 0 blocks pending in this WIJ. Exiting with status 3 (Success) 01/03/20-16:26:43:627 (8108) 2 Failed to allocate 2880MB shared memory using large pages. Switching to small pages. 01/03/20-16:26:43:627 (8108) 0 Allocated 2880MB shared memory: 2048MB global buffers, 512MB routine buffers 01/03/20-16:26:43:627 (8108) 0 Intel Sandy Bridge AES-NI instructions detected. 01/03/20-16:26:43:731 (8108) 0 Jrn info from prior WIJ (imflags: 0): (Skip multiple records…) 01/04/20-00:00:00:804 (6900) 1 Warning: Alternate and primary journal directories are the same 01/04/20-00:00:00:820 (16272) 0 CACHE JOURNALING SYSTEM MESSAGE Journaling switched to: c:\intersystems\hsap\mgr\journal\20200104.001 01/04/20-10:15:41:703 (16096) 0 DELETE: c:\intersystems\hsap\mgr\journal\20191231.001 01/04/20-10:15:41:734 (12224) 0 Purging old application errors 01/05/20-00:00:00:497 (6900) 1 Warning: Alternate and primary journal directories are the same...(repeated 1 times) 01/05/20-00:00:00:528 (12472) 0 CACHE JOURNALING SYSTEM MESSAGE Journaling switched to: c:\intersystems\hsap\mgr\journal\20200105.001 01/05/20-00:00:01:653 (11436) 1 %SYS.Task.FeatureTracker failed to transfer data 01/05/20-18:18:34:726 (2260) 0 DELETE: c:\intersystems\hsap\mgr\journal\20200101.001 01/05/20-18:18:34:789 (14444) 0 Purging old application errors ``` 控制台日志的记录包括系统的启动停止记录,许可证的使用情况,各种底层资源,网络连接,数据库日志等等的所有内容。记录按严重程度四个等级,分别是 - 0: 一般性消息 (Information/Status) - 1: 警告性错误 (Warning) - 2: 严重错误 (Severe) - 3: 致命性错误 (Fatal) **除了等级为0的一般性消息,剩下的1,2,3个等级的记录都被称为错误**。错误的严重程度从1到3逐渐升高,其中2和3两个级别通常被称为严重错误(Serious Alert)。默认的配置下,它们会被写如另一个警告通知的日志Alert.log,以通知管理员。比如上面例子中的第9行 *“01/03/20-16:26:43:627 (8108) 2 Failed to allocate 2880MB shared memory using large pages. Switching to small pages.”*,就是一个Severe错误,应该被管理员马上知晓。 ### 错误是怎么来的 这里只说控制台日志中呈现的错误,也就是等级1-3的记录,它们的来源有: #### 系统底层直接产生的错误 系统底层产生的基本是严重错误 (Severe)和致命性错误 (Fatal)级别,这里给几个常见的例子,文章z > Write to journal file has failed > ECP client daemon/connection is hung > Failure during PIJ processing - Declaring a crash > Error reading block – recovery read error > Error writing block – recovery write error > ... 这里是[完整的列表的链接](https://docs.intersystems.com/iris20231/csp/docbook/DocBook.UI.Page.cls?KEY=GCM_monitor#GCM_monitor_errors) #### 系统监视器产生的错误 系统运行中默认的系统监视器(System Monitor)和健康监视器(Health Monitor)负责系统的监控工作。他们工作在%SYS命名空间,默认会随系统启动而启动,然后以30秒一次的频率读取系统指标,当指标达到并超过预置的门限值时会触发错误信息写入控制台日志, 级别是Warning(警告)或者严重错误 (Severe)。 > 这里只列出默认情况下什么样的指标会触发错误消息,而背后详细的技术细节会在 “Caché和IRIS的监控器”章节介绍。 **系统监视器产生的错误**针对系统的运行状态和资源,**产生告警的规则不可修改**。注意下图中Warning, Alert对应着Console log里的Waring级别和Severe或者fatal级别。 下表可以在最新版本的IRIS文档中的[这个链接](https://docs.intersystems.com/iris20231/csp/docbook/DocBook.UI.Page.cls?KEY=GCM_healthmon#GCM_healthmon_sysmon_alerts)找到。 ![image-20230419161017432](.pictures/image-20230419161017432.png) #### 健康监视器产生的错误 Health Monitor是另一个评估内部产生的指标的监视器,也是工作在%sys命名空间。它和System Monitor的区别是: **用户可以修改评估的规则,设置适合自己的告警门限值。** Health Monitor默认不激活,因此需要人工启动。但是,如果你发现虽然你没有启动HealthMonitor, 但系统正按照它的规则发送通知,那也不用奇怪,那就是这个监视器的一部分规则不需要启动就自动工作。它的监控项目和规则如下图。 ``` Sensor Base Max Max M Warn Warn M ------ ---- --- ----- ---- ------ CPUPct 50 90 0 80 0 CPUusage 50 85 0 75 0 CSPActivity 100 0 2 0 1.6 CSPActualConnections 100 0 2 0 1.6 CSPGatewayLatency 1000 2000 0 1000 0 CSPInUseConnections 100 0 2 0 1.6 CSPPrivateConnections 100 0 2 0 1.6 CSPSessions 100 0 2 0 1.6 DBLatency 1000 3000 0 1000 0 DBReads 1024 0 2 0 1.6 DBWrites 1024 0 2 0 1.6 DiskPercentFull 50 99 0 95 0 ECPAppServerKBPerMinute 1024 0 2 0 1.6 ECPConnections 100 0 2 0 1.6 ECPDataServerKBPerMinute 1024 0 2 0 1.6 ECPLatency 1000 5000 0 3000 0 ECPTransOpenCount 100 0 2 0 1.6 ECPTransOpenSecsMax 60 0 2 0 1.6 GlobalRefsPerMin 1024 0 2 0 1.6 GlobalSetKillPerMin 1024 0 2 0 1.6 JournalEntriesPerMin 1024 0 2 0 1.6 JournalGrowthRate 1024 0 2 0 1.6 LicensePercentUsed 50 0 1.5 0 0 LicenseUsedRate 20 0 1.5 0 0 LockTablePercentFull 50 99 0 85 0 LogicalBlockRequestsPerMin 1024 0 2 0 1.6 MirrorDatabaseLatencyBytes 20000000 0 2 0 1.6 MirrorDatabaseLatencyFiles 3 0 2 0 1.6 MirrorDatabaseLatencyTime 1000 8000 0 4000 0 MirrorJournalLatencyBytes 20000000 0 2 0 1.6 MirrorJournalLatencyFiles 3 0 2 0 1.6 MirrorJournalLatencyTime 1000 5000 0 3000 0 PhysicalBlockReadsPerMin 1024 0 2 0 1.6 PhysicalBlockWritesPerMin 1024 0 2 0 1.6 ProcessCount 100 0 2 0 1.6 RoutineCommandsPerMin 1024 0 2 0 1.6 RoutineLoadsPerMin 1024 0 2 0 1.6 RoutineRefsPerMin 1024 0 2 0 1.6 SMHPercentFull 50 98 0 85 0 ShadowConnectionsLatency 1000 0 2 0 1.6 ShadowLatency 1000 0 2 0 1.6 TransOpenCount 100 0 2 0 1.6 TransOpenSecsMax 60 0 2 0 1.6 WDBuffers 1024 0 2 0 1.6 WDCycleTime 60 0 2 0 1.6 WDWIJTime 60 0 2 0 1.6 WDWriteSize 1024 0 2 0 1.6 ``` 表格很长,共列有47个sensor。大概的意思都可以从名字看出来,如果要阅读具体的定义,请看[原始文档](https://docs.intersystems.com/iris20231/csp/docbook/DocBook.UI.Page.cls?KEY=GCM_healthmon#GCM_healthmon_overview_api_sensors)。后面的几个字段,Base,Max,Max M,Warn,Warn M定义了这个sensor是怎么确定门限值的。 **第1类:固定的门限值** 也就是定义了Base, Max, Warning字段内容的条目,比如这个条目: ``` Sensor Base Max Max M Warn Warn M ------ ---- --- ----- ---- ------ CPUusage 50 85 0 75 0 ``` - 只要System Monitor已经启动,这个rule就工作,不需要Health Monitor处于激活状态。 - 只用max和warning值来决定是否超门限。连续3次读数超过了max值,产生alert, 连续5次读数超过了warning值,产生warning. 对于这些指标,系统允许用户自己设置告警的门限值,比如把上面CSPUsage的Warn, Max修改为80,90,或其他适合用户自己的数值。 **第2类:动态的门限值** 也就是定义了Base, Multiplier, WarningMultiplier字段内容的条目。例如下面的DBReads: ``` Sensor Base Max Max M Warn Warn M ------ ---- --- ----- ---- ------ DBReads 1024 0 2 0 1.6 ``` 统计学上, 均值(Mean)加3个Sigma是最常用的判断一个采样是否偏离太多的方法。因为是要设置门限值,这里添加了两个乘法系数(Multiplier), MAX M和Warn M,得到一个动态的门限值。当sensor的采样值比均值大的太多了,就会产生错误条目,warning或者alert. 具体的公式是: `产生错误的门限= Max((平均值+3*Sigma)*Multiplier,最大值+Sigma)` 因为大多数情况Max()中第一项的数值都是大的,所以公式可以翻译为:比(平均值+3个sigma)*Multiplier,就是告警的门限。 以上面例子中DBReads说明: Base= 1024, Multiplier=2;WarningMultplier=1.6。监视器开始运行时,会不停的计算这个时段内的平均值,最大值和sigma,产生一个Chart。假如某一刻平均值=2145, sigma=141,最大值为2327,那么根据上面的公式: `Warning门限 = Max((2145+3*141) * 1.6,2327+141) = 4108.8` `Alert门限 = Max((2145+3*141) * 2, 2327+141) = 5136` 也就是说,当您DBReads, 也就是数据库读的平均值是2145/s时,突然来了一个超过4109/s的业务,就会有一个错误信息写到控制台日志,严重级别是1, warning。短时间数据库查询再增加,超过alert门限,就会有严重级别为2的控制台日志被写入,同时这个条目也会写到alert.log文件,用来向管理员发通知。 可以看出,这个设置中base不重要,它只在监视器刚启动时有用,而使这个门限值有意义的是multipler的设置。 这要求用户对自己的业务很熟悉,而且经常的调整才能得到合适的设置,否则就可能在业务波动大的时候得到很多的错误信息,或者得不到自己想要记录的大的业务波动。 重要的一点: 拥有动态门限值的sensor默认是不工作的, 您想要激活Health Monitor。 是这么操作的: ``` %SYS>do ^%SYSMONMGR 1) Start/Stop System Monitor 2) Set System Monitor Options 3) Configure System Monitor Classes 4) View System Monitor State 5) Manage Application Monitor 6) Manage Health Monitor 7) View System Data 8) Exit Option? 6 1) Enable/Disable Health Monitor 2) View Alerts Records 3) Configure Health Monitor Classes 4) Set Health Monitor Options 5) Exit Option? 1 ...后面省略... ``` 用户还可以自定义了Chart,或者修改及自定义默认的14个监控时段(Period),以得到更准确的错误产生的控制。有关这些内容请参见在线文档。 #### 上层应用产生的错误 上层的应用可以调用代码把它认为的错误写到控制台日志,而且可以任意定义级别。实际情况中,真正使用控制台日志来发送应用层面的错误的不多,如果您的系统中发现有, 那么一定能很清楚的把这部分错误条目和上述Caché , IRIS系统本身产生的区分出来。 ### 维护人员对错误的控制 维护人员对错误的控制最基本就是调整健康监视器的门限值。上面讲了两类门限值的理论,下面给出一个例子,显示是怎么修改固定门限值的设置的: ```bash %SYS>do ^%SYSMONMGR 1) Start/Stop System Monitor 2) Set System Monitor Options 3) Configure System Monitor Classes 4) View System Monitor State 5) Manage Application Monitor 6) Manage Health Monitor 7) View System Data 8) Exit Option? 6 1) Enable/Disable Health Monitor 2) View Alerts Records 3) Configure Health Monitor Classes 4) Set Health Monitor Options 5) Exit Option? 3 1) Activate/Deactivate Rules 2) Configure Periods 3) Configure Charts 4) Edit Sensor Objects 5) Reset Defaults 6) Exit Option? 4 1) List Sensor Objects 2) Edit Sensor Object 3) Exit Option? 1 Sensor Base Max Max M Warn Warn M ------ ---- --- ----- ---- ------ CPUPct 50 90 0 80 0 CPUusage 50 85 0 75 0 CSPActivity 100 0 2 0 1.6 CSPActualConnections 100 0 2 0 1.6 CSPGatewayLatency 1000 2000 0 1000 0 CSPInUseConnections 100 0 2 0 1.6 CSPPrivateConnections 100 0 2 0 1.6 CSPSessions 100 0 2 0 1.6 DBLatency 1000 3000 0 1000 0 DBReads 1024 0 2 0 1.6 DBWrites 1024 0 2 0 1.6 DiskPercentFull 50 99 0 95 0 ...(省略多行) WDWriteSize 1024 0 2 0 1.6 1) List Sensor Objects 2) Edit Sensor Object 3) Exit Option? 2 Sensor? 12 DiskPercentFull Base? 50 => Enter either an Alert Value or a Multiplier Alert Value? 99 => 90 Setting Max Multiplier and Warn Multiplier to 0. Enter a Warn Value Warn Value? 95 => 60 Sensor object DiskPercentFull updated. Base 50 MaxMult 0 AlertValue 90 WarnMult 0 WarnValue 60 1) List Sensor Objects 2) Edit Sensor Object 3) Exit ``` 上面的操作中有一个‘神秘数字’ 12. 怎么知道DiskPercentFull是第12个sensor? 我是从列表里数下来的。 注意在修改senosr会出提示要把System Monitor停掉。修改后再启动System Monitor, 这样如果您的硬盘使用超过了60%, 就会收到类似的控制台日志条目: > 12/12/18-15:32:37:349 (13700) 1 [SYSTEM MONITOR] DiskPercentFull(d:\htp\data\) Warning: DiskPercentFull = 74.52 ( Warnvalue is 60). **重复发生的错误会被再次写入控制台日志吗?** 除了最底层的,关乎系统整体运行的少数错误,大部分错误如果在一个小时内重复发生,只有第一次会被写入日志。这就要求用户必须有实时的通知机制, ### 控制台日志的管理 大多数用户不需要操心控制台日志的管理,少数很老的Caché的用户会拥有一个很大尺寸的console.log, 最大的曾见过80MB的文件,这时候从操作门户的页面去查看,已经出现了显示的延迟。 console.log或者messages.log的大小是由系统设置参数‘MaxConsoleLogSize’设定的。 在IRIS和最近些版本的Caché中, 这个设置的值是5MB(您可以在**操作门户的‘系统>设置>其它设置>启动**‘的列表里查看或者修改这个值。 如果一个控制台日志超过了5MB, 会自动切换, 原来的console.log, message.log,会改名为console.log.old.yyyymmdd, 或者message.log.old.yyyymmdd。
公告
Claire Zheng · 六月 20, 2021

InterSystems 开发者竞赛:人工智能与机器学习

亲爱的社区开发者们,大家好! 欢迎积极参与新一轮InterSystems开发者竞赛! 🏆 InterSystems 编程大赛:人工智能与机器学习 🏆 竞赛时间: 2021年6月28日 - 7月25日 奖金总额: $8,750 奖项设置 1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第一名- $4,000 🥈 第二名 - $2,000 🥉 第三名 - $1,000 2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇 第一名 - $1,000 🥈 第二名 - $500 🥉 第三名 - $250 如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金。 谁可以参加 任何开发者社区的成员均可参加,InterSystems内部员工除外。还没有账号?现在来建一个! 👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。 请注意,要在您的README文件中标注您的团队成员——社区用户profile 参赛时间安排 🛠 6月 28日 - 7月18日: 应用开发、提交阶段 ✅ 7月19日 - 7月 25日: 投票阶段 🎉 7月26日: 宣布优胜者! 注意:在整个参赛期间(开发与投票期间,即6月28日-7月25日),开发者可持续编辑、提升其应用 主题 🤖 人工智能与机器学习 🤖 利用InterSystems IRIS开发一个AI/ML解决方案。您的应用程序可以是一个库(library)、包(package)、工具(tool)或任何使用InterSystems IRIS的AI/ML解决方案。 以下是参赛须知: 有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 利用InterSystems IRIS构建使用AI/ML功能的应用程序。 该应用应该在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition 上工作。 该应用需开源并在GitHub上发布。 该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。 (如果有),那么InterSystems ObjectScript部分的源代码应该以UDL(而非XML)格式提交, 举例说明。 上述要求可能会按需修订 资源助力 1. 我们建议从以下模板开始: InterSystems IntegragedML template IRIS R Gateway template 2. 数据导入工具 Data Import Wizard CSVGEN - CSV import util CSVGEN-UI - the web UI for CSVGEN 3. 文档 Using IntegratedML 4. 在线资源 Learn IntegratedML in InterSystems IRIS Preparing Your Data for Machine Learning Predictive Modeling with the Machine Learning Toolkit 5. 如何将您的APP提交给大赛:: 如何在InterSystems Open Exchange上发布应用程序 如何把参赛APP提交给大赛 参赛评比 投票规则即将发布,敬请期待! 期待您的精彩提交!加入我们的编程马拉松,赢取大奖! ❗️点击此处,查看 官方竞赛条款解读❗️ 成为社区活跃客户后即可参与投票:https://cn.community.intersystems.com/post/%E5%A6%82%E4%BD%95%E6%9B%B4%E5%A5%BD%E5%9C%B0%E6%88%90%E4%B8%BA%E7%A4%BE%E5%8C%BA%E8%B4%A1%E7%8C%AE%E8%80%85%E6%B4%BB%E8%B7%83%E7%94%A8%E6%88%B7%EF%BC%9F
公告
Tingting Jiang · 六月 21, 2022

InterSystems热招职位(3):Technical Specialist(Product Support)

InterSystems正在招聘Technical Specialist(Product Support),欢迎您的自荐、推荐。 请将简历投递至Belinda.Glasson@intersystems.com,愿您的加入给我们带来新的活力,我们也将为您提供广阔的发展空间!(由于岗位职能要求,职位说明以英文形式发布。) Location:Beijing Job Title:Technical Specialist Department:Product Support Reporting to:China Support Supervisor What We Do Matters Why are we here? To ensure that our customers have reliable access to the right information at the right time—information they can share and use to draw insights, leading to better decisions. Job Summary The Technical Specialist will be required to perform custom development tasks and provide support for InterSystems TrakCare and related products. The Technical Specialist will be responsible for site specific software support and development activities and to ensure that the software satisfies project specifications and is delivered and deployed in line with project requirements. The Technical Specialist must be available to visit client sites (e.g. hospitals/laboratories) and implementation partners for technical support and/or to provide technical training. Some travel may be required. Key Responsibilities of the Role Provide immediate response to customer inquiries in accordance with service standards. Provide technical support for interfaces, reports, extracts, data migration scripts and conversions. Provide advice and best practices for technical areas such as networks, configurations, architectures etc. Provide technical support for troubleshooting and performance analysis for reports, stored procedures, interfaces, conversions, data migration scripts and user defined functions. Escalate Open (unresolved) problems in accordance with current policies and procedures. Production of training materials for technical courses such as system custom development or reporting. Production of technical documentation such as reference materials, installation instructions, user guides, knowledge-base articles. Continuously improve customer satisfaction by soliciting customer suggestions for product and service improvements and then escalating such suggestions to management. Improve response time to customer inquiries by continuously improving communication, analytical, and learning skills. Participate in on-site technical training if required. Participate in on-site technical implementations if required. Participate in the on call 24 hour roster service. Assistance in researching new development or report writing 3rd party products such as JReports. Experience and Qualifications BS or MS in Computer Science or equivalent. Knowledge of web oriented languages, including HTML, and Java script, SQL, data analysis and database methodologies. Knowledge of Linux is strongly desired, VMWare is a plus. Knowledge of programming languages – ideally Java or C++. Personal Specifications Information Technology or Science Degree
文章
Michael Lei · 六月 7, 2022

InterSystems 最佳实践之--发挥 $Query 的最大作用

我今天遇到了一个有趣的ObjectScript用例,有一个通用的解决方案,我想与大家分享。 用例: 我有一个JSON数组(在本例中具体而言是一个来自Jira的问题数组),我想在几个字段上进行聚合--例如,类别、优先级和问题类型。然后,我想把聚合的数据编平化到一个简单的列表中,其中包含每个组的总数。当然,对于聚合来说,使用一个本地数组的形式是有意义的,即: agg(category, priority, type) = total 这样,对于输入数组中的每一条记录,我可以只用: Do $increment(agg(category, priority, type)) 但是一旦我做了聚合,我想把它变成一种更容易迭代的形式,比如一个整数下标的数组: summary = n summary(1) = $listbuild(total1, category1, priority1, type1) ... summary(n) = $listbuild(totalN, categoryN, priorityN, typeN) 基础解决方案: 简单的方法是,用$Order嵌套三个For循环--比如说: Set category = "" For { Set category = $Order(agg(category)) Quit:category="" Set priority = "" For { Set priority = $Order(agg(category,priority)) Quit:priority="" Set type = "" For { Set type = $Order(agg(category,priority,type),1,total) Quit:type="" Set summary($i(summary)) = $listbuild(total,category,priority,type) } } } 这就是我开始使用的方法,但它有很多代码,而且如果我有更多的维度来聚合,它很快就会变得不方便了。这让我想知道--是否有一个通用的解决方案来完成同样的事情?事实证明是有的! 使用 $Query的优化方案: 我决定使用$query会有帮助。请注意,这个解决方案假定整个本地数组中子标/值的深度是一致的;如果没有了这个假设,就会导致奇怪的结果. ClassMethod Flatten(ByRef deep, Output flat) [ PublicList = deep ] { Set reference = "deep" For { Set reference = $query(@reference) Quit:reference="" Set value = $listbuild(@reference) For i=1:1:$qlength(reference) { Set value = value_$listbuild($qsubscript(reference,i)) } Set flat($i(flat)) = value } } 所以以上片段被替换为: Do ..Flatten(.agg,.summary) 几点需要注意的: deep 需要在PublicList中,以便$query能够对其进行操作 在每个迭代中,reference 被改变为引用deep中下一组有价值的子标号--例如,值可能是:deep("foo", "bar") $qlength 返回reference中子标的数量 $qsubscript 返回reference中第i个下标的值 当$listbuild列表被串联起来时,一个有效的$listbuild列表与合并后的列表就得出结果(这比使用任何其他分隔符都要好!) 总结 $query, $qlength, 和 $qsubscript 在处理任意深度的Global/Local数组时非常方便。 进阶阅读 $Query: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_FQUERY$QSubscript: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.cls?KEY=RCOS_fqsubscript$QLength: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.cls?KEY=RCOS_fqlength
公告
jieliang liu · 四月 18, 2022

[视频] InterSystems Globals与灵活的数据建模

各位开发者们好, InterSystems IRIS 数据平台的最大特点之一是它允许您创建自己的自定义,您可以使用InterSystems IRIS 中支持的所有其他模型,例如对象和关系结构,而无需创建任何自定义结构。 ⏯ InterSystems Globals与灵活的数据建模 Globals 请各位开发者关注我们的Bilibili 频道InterSystems Bilibili 主页!
公告
Michael Lei · 四月 29, 2022

InterSystems 2022年度编程大奖赛投票开始!

年度InterSystems IRIS开发者大赛来了,我们特别兴奋能够邀请大家参加我们今年的年度大奖赛,利用InterSystems IRIS数据平台创建开源解决方案! 🏆 InterSystems2022年度编程大奖赛 🏆 时间: 2021年5月9日 - 6月5日(美东时间) 总奖金超过$22,000美金,比去年提高37%!!! 主题 InterSystems 编程大奖赛是我们的年度编程大赛,旨在寻找使用InterSystems IRIS的最佳应用。 我们欢迎任何主题的申请! 提交任何使用InterSystems IRIS作为后端(API或数据库)的应用程序,以及任何类型的InterSystems IRIS API或数据模型。 我们欢迎您改进您去年在InterSystems竞赛系列中展示的应用程序,并提交给大奖赛。也欢迎您提交一个100%的新应用。 要求: 参赛作品申请:新加入Open Exchange的应用程序或现有的应用程序,但要有明显的改进。我们的团队将审核所有参赛申请后决定是否批准参赛. 该应用应在IRIS社区版或IRIS for Health社区版或IRIS高级分析社区版上运行. 该应用程序应是开源的,并在GitHub上发布 应用程序的README文件应该是英文的,包含安装步骤,并包含视频演示或/和应用程序如何工作的描述。 每位开发者最多可提交三个应用。 奖项设置(2022年总奖金比去年增长37.5%!!!): 1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第一名- $7,000 🥈 第二名- $5,000 🥉 第三名- $3,000 🌟 第四到二十名- $100 2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇 第一名- $3,000 🥈 第二名- $2,000 🥉 第三名- $1,000 ✨ 所有获奖者都将授予Global Masters奖章! 如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金。 重要参赛时间安排 🛠 5月9日-29日(美东时间): 应用程序开发和注册阶段(在此期间,您可以持续编辑自己的项目) ✅ 5月30日(美东时间): 开启投票阶段(在此期间,您可以持续编辑自己的项目) ✅ 6月5日(美东时间): 投票截止 谁能参加? 除了InterSystems员工以外的所有社区成员. 快来加入吧! 开发者可以组队参加,每队2-5人。 不要忘记在您的应用程序的README中标明你的团队成员--开发者社区用户资料。 您可以使用的资源 ✓ 如何使用 InterSystems IRIS (初学者): Build a Server-Side Application with InterSystems IRIS Learning Path for beginners ✓ 初学者如何使用 ObjectScript Package Manager (ZPM): How to Build, Test and Publish ZPM Package with REST Application for InterSystems IRIS Package First Development Approach with InterSystems IRIS and ZPM 代码示例: objectscript-docker-template rest-api-contest-template native-api-contest-template integratedml-demo-template PythonGateway-template iris-fhir-template iris-fullstack-template iris-interoperability-template iris-analytics-template 如何把您的APP提交给大赛: 如何在 InterSystems Open Exchange 上发布应用程序 如何把参赛APP提交给大赛 需要帮助吗? 欢迎在本帖下留言或联系您熟悉的InterSystems员工。 万分期待你的精彩项目!祝大家好运 👍 参加本次比赛,即表示您同意这里规定的比赛条款。请在进行比赛前仔细阅读这些条款。
文章
Jingwei Wang · 十二月 22, 2021

使用内置REST API监控InterSystems IRIS

IRIS 2019.4 预览版中发布了/api/monitor服务,以Prometheus格式展示IRIS指标,但没有正式公布。对于任何想要使用IRIS指标作为其监控和警报解决方案的一部分的人来说,这是一个大新闻。该API是新的IRIS 系统警报和监控(SAM)解决方案的一个组成部分,将在IRIS的一个即将到来的版本中发布。 然而,你不必等待SAM开始规划和试用这个API来监控你的IRIS实例。在未来的文章中,我将深入挖掘可用的指标和它们的含义,并提供交互式仪表盘的例子。但首先,让我从一些背景和一些问题和答案开始。 IRIS(和Caché)总是在收集关于它自己和它所运行的平台的几十个指标。一直以来都有多种收集这些指标的方法来监控Caché和IRIS。我发现,很少有安装使用IRIS和Caché内置的解决方案。例如,History Monitor仪表盘作为性能和系统使用指标的历史数据库已经存在很长时间了。然而,没有明显的方法来展现这些指标,并实时监测系统。 IRIS平台的解决方案正在从运行在几个企业内部的实例上的单体应用程序,转向分布式解决方案部署在 "任何地方"。对于许多用例,现有的IRIS监控选项并不适合这些新的模式。InterSystems没有使用陈旧的方法,而是寻找当前流行的、经过验证的开源解决方案进行监控和警报。 普罗米修斯? 普罗米修斯是一个著名的、广泛部署的、技术成熟的开源监控系统。它有各种各样的插件,且能在云环境中很好地工作,对本地部署也同样有用。其插件包括操作系统、网络服务器(如Apache)和许多其他应用程序。普罗米修斯通常与可视化工具一起使用,例如,Grafana。 Grafana? Grafana也是开源的。随着这一系列文章的进行,我将提供常见场景的监控仪表盘的样本模板。你可以把这些样本作为基础,为你所关心的事情设计仪表盘。当你把IRIS的指标与你整个解决方案堆栈的指标结合起来时,真正的力量就来了。从平台组件、操作系统、IRIS,特别是当你从你的应用程序中添加仪器时。 以前没有使用过吗? 用Prometheus和Grafana监控IRIS和Caché并不新鲜。几年来,我一直在使用这些应用程序来监控我的开发和测试系统。如果你在开发者社区搜索 "Prometheus",你会发现其他的帖子(例如,Mikhail Khomenko的一些优秀帖子),显示如何暴露Caché指标供Prometheus使用。 现在版本的区别是,/api/monitor API被包括在版本内,并且默认启用。不需要编码你自己的类来暴露度量。 普罗米修斯入门 这里是对Prometheus和一些术语的快速介绍。我希望你能看到高层次的东西,帮你考虑如何可视化或使用metrics打下一些基础。 普罗米修斯的工作方式是刮取或拉取从HTTP端点(API,如IRIS /api/monitor)的应用程序中暴露的时序数据。Exporters和客户端库存在于许多语言、框架和开源应用程序,例如,网络服务器Apache、操作系统、docker、Kubernetes、数据库以及现在的IRIS。 Exporters被用来检测应用程序和服务,并在一个端点上展示相关的指标,以便进行数据拉取。核心exporters支持网络服务器、数据库等标准组件。许多其他开源exporters可从Prometheus社区获得。 普罗米修斯术语 有几个关键术语是需要了解。 Targets是服务所在的目标,如主机或应用程序或Apache或IRIS等服务或你自己的应用程序。 普罗米修斯通过HTTP对目标进行抓取,收集时间序列数据的指标。 时间序列数据是由应用程序暴露的,例如IRIS或通过exporters。 Exporters可用于你无法控制的东西,如Linux内核指标。 由此产生的时间序列数据被储存在Prometheus服务器的本地数据库中。 时间序列数据库可以使用优化的查询语言(PromQL)进行查询。例如,创建警报或由客户应用程序(如Grafana)在仪表板上显示指标。 然而,对Prometheus数据库的访问--在IRIS上--是透明的,Grafana等应用程序不知道也不关心。 Spoiler Alert:出于安全、扩展、高可用性和其他一些运行效率的考虑,对于新的SAM解决方案,用于Prometheus时间序列数据的数据库是IRIS!这也是为什么我们要把Prometheus数据库的访问权放在IRIS上。然而,对Prometheus数据库的访问在IRIS上是透明的,Grafana等应用程序不知道也不关心。 普罗米修斯数据模型 由API返回的metrics是Prometheus格式的。普罗米修斯使用一种简单的基于文本的指标格式,每行有一个指标,格式是。 <identifier> [ (time n, value n), ....] 衡量标准使用标签(键,值)对。标签是一种强大的作为维度的方式来过滤度量。例如,检测IRIS /api/monitor返回的单一指标:日志的可用空间。 iris_jrn_free_space{id="WIJ",dir=”/fast/wij/"} 401562.83 标识符告诉你该指标是什么。 iris_jrn_free_space 多个标签可以用来修饰指标,用来过滤和查询。在这个例子中,可以看到 WIJ 和存储 WIJ 的目录。 id="WIJ",dir="/fast/wij/" 和值: 401562.83 (MB). What IRIS metrics are available? The preview documentation has a list of metrics. However, be aware there may be changes. You can also simply query the /api/monitor/metrics endpoint and see the list. I use Postman which I will demonstrate in the next community post. 可以用哪些IRIS指标? 预览文档有一个metrics的列表。请注意可能会有变化。你也可以简单地查询/api/monitor/metrics端点并查看该列表。我将在下一篇社区文章中演示使用Postman调用这个端点。 应该监控什么? 当你考虑如何监控你的系统和应用程序时,请牢记这些要点。 对影响用户的关键指标进行检测。 用户并不关心你的一台机器的CPU是否不足。 用户关心的是服务是否缓慢或有错误。 对于你的主要仪表盘来说,重点是直接影响用户的高级指标。 对于你的仪表盘来说,要避免一整面墙的图表。 人类无法同时处理太多的数据。 例如,每个服务拥有一个仪表板。 考虑服务,而不是机器。 一旦你把问题隔离到一个服务上,那么你就可以深入研究,看看是否是一台机器的问题。 参考资料 文档下载:Prometheus 和 Grafana 我在InterSystems 2019年全球峰会上介绍了SAM(包括Prometheus和Grafana)的预发布概述,你可以找到InterSystems学习服务网站的链接。如果链接不起作用,请进入InterSystems学习服务网站并搜索。"系统警报和监控变得简单" 在社区中搜索 "Prometheus "和 "Grafana"。查看原帖 由 @Murray Oldfield 撰写
公告
Claire Zheng · 十月 23, 2021

2021全球峰会! Win. Win. Win with InterSystems Developer Ecosystem~

亲爱的开发者们, 是否准备参加InterSystems 2021全球峰会呢?不要错过InterSystems Developer Community、Open Exchange和Global Masters的专题会议! ⚡️ "Win. Win. Win with InterSystems Developer Ecosystem" VSummit21 session ⚡️ 🎁 注意:所有参会者都将获得额外奖励哦~ 分享嘉宾:🗣 @Anastasia.Dyubaylo, InterSystems开发者社区经理 🗣 @Lena.Evsikova, Product Owner of InterSystems Open Exchange🗣 @Olga.Zavrazhnova2637, Customer Advocacy Manager, InterSystems 了解如何更好地使用 InterSystems 开发者社区、Global Masters (游戏化中心)和Open Exchange(应用程序库)。 兴趣: 开发经验,InterSystems IRIS,用户社区 论坛从10月27日起即可观看!(中国用户需注册观看) 来吧! 加入我们的会议,享受InterSystems技术和我们为开发者提供的生态系统的完整体验!
文章
Jingwei Wang · 七月 21, 2022

InterSystems SQL 的使用 - 第五部分 - 导入SQL Code

本章介绍了如何将SQL code从文本文件导入InterSystems SQL。当你导入SQL code时,InterSystems IRIS 数据平台使用动态SQL准备并执行每一行的SQL。如果遇到无法解析的SQL code行,SQL导入会跳过该行code,继续准备和执行后续的code行,直到到达文件的末端。所有的SQL code导入操作都会导入到当前的命名空间。 SQL导入主要用于导入数据定义语言(DDL)命令,如CREATE TABLE,并使用INSERT、UPDATE和DELETE命令来填充表。SQL导入可以准备和执行SELECT查询,但不创建结果集。 SQL导入可以用来导入InterSystems的SQL code。它也可以用于code迁移,从其他供应商(FDBMS、Informix、InterBase、MSSQLServer、MySQL、Oracle、Sybase)导入SQL。来自其他供应商的code被转换为InterSystems的SQL并执行。SQL导入不能将所有的SQL命令导入到InterSystems SQL中。它导入的是那些与InterSystems IRIS实现的SQL标准兼容的命令和条款。不兼容的特征通常会被解析,但会被忽略。 SQL导入可以成功地准备一个SQL查询--在适当的时候创建一个相应的缓存查询--但它不会执行查询。 你通过调用%SYSTEM.SQL.Schema类中的适当方法来执行SQL code导入。当导入SQL code时,这些方法可以创建另外两个文件:一个是Errors.log文件,它记录了解析SQL命令的错误;另一个是Unsupported.log文件,它包含了该方法不能识别为SQL命令的行的字面文本。 导入 InterSystems SQL Code 你可以使用%SYSTEM.SQL.Schema方法从一个文本文件中导入InterSystems的SQL code。 ImportDDL()是一个通用的SQL导入方法。该方法作为一个后台(非交互式)进程运行。如下面的例子中所示,示例中第一个参数mysqlcode.txt为SQL命令文件,第二个参数是默认的错误日志文件mysqlcode_Errors.log,第三个参数指定为 "IRIS "。 DO $SYSTEM.SQL.Schema.ImportDDL("c:\InterSystems\mysqlcode.txt",,"IRIS") 注意:这种SQL DDL代码的导入和执行不应该与管理门户SQL界面的导入语句操作相混淆。管理门户SQL界面的导入语句是以XML格式导入SQL语句。 这个mysqlcode.txt文本文件必须是一个没有格式化的文件,如.txt文件。每条SQL命令必须在自己的行中开始。一个SQL命令可以分成多行,允许缩进。每条SQL命令后面必须有一个GO语句,并在自己的行上,下面是一个有效的InterSystems SQL导入文件文本的例子: CREATE TABLE Sample.MyStudents (StudentName VARCHAR(32),StudentDOB DATE) GO CREATE INDEX NameIdx ON TABLE Sample.MyStudents (StudentName) GO INSERT INTO Sample.MyStudents (StudentName,StudentDOB) SELECT Name, DOB FROM Sample.Person WHERE Age <= '21' GO INSERT INTO Sample.MyStudents (StudentName,StudentDOB) VALUES ('Jones,Mary',60123) GO UPDATE Sample.MyStudents SET StudentName='Smith-Jones,Mary' WHERE StudentName='Jones,Mary' GO DELETE FROM Sample.MyStudents WHERE StudentName %STARTSWITH 'A' GO Run() 是一个InterSystems SQL导入方法。这个方法在终端以交互方式运行。它提示你指定导入文本文件的位置,创建Errors.log文件和Unsupported.log文件的位置,以及其他信息。 支持的SQL命令 不是所有有效的InterSystems SQL命令都能被导入。以下是支持的InterSystems SQL命令的列表。 CREATE TABLE, ALTER TABLE, DROP TABLE ​ CREATE VIEW, ALTER VIEW, DROP VIEW ​ CREATE INDEX all index types, except bitslice ​ CREATE USER, DROP USER ​ CREATE ROLE ​ GRANT, REVOKE ​ INSERT, UPDATE, INSERT OR UPDATE, DELETE ​ SET OPTION ​ SELECT for optimizer plan mode only 导入非 InterSystems SQL Code InterSystems SQL 支持导入其他供应商使用的SQL。来自其他供应商的code被转换为InterSystems的SQL code并执行,我们提供了以下方法。 ImportDDL() 也可以用来导入非InterSystems SQL。 要导入特定格式的SQL,你需要指定该格式的名称作为一个参数,例如 FDBMS, Informix, InterBase, MSSQLServer (或MSSQL), MySQL, Oracle, 或Sybase。下面的例子导入了MSSQL代码文件mssqlcode.txt,在当前命名空间中执行该文件中列出的SQL命令。 DO $SYSTEM.SQL.Schema.ImportDDL($lb("C:\temp\somesql.sql","UTF8"),,"MSSQL") 注意,如果第三个参数是MSSQL、Sybase、Informix或MySQL,第一个参数可以是一个SQL code文件路径名或一个双元素%List,第一个元素是SQL code文件路径名,第二个元素是要使用的I/O转换表。 在%SYSTEM.SQL.Schema中提供了单独的交互式方法来导入以下类型的SQL。LoadFDBMS(), LoadInformix(), LoadInterBase(), LoadMSSQLServer(), LoadOracle(), and LoadSybase()。这些方法从终端交互式地运行。它提示你指定导入文本文件的位置,创建Errors.log文件和Unsupported.log文件的位置,以及其他信息。 ImportDDLDir()允许你从一个目录中的多个文件导入SQL code。该方法作为一个后台进程运行。它支持Informix、MSSQLServer和Sybase。所有要导入的文件必须有一个.sql**的后缀。 ImportDir()允许你从一个目录中的多个文件导入SQL code。比ImportDDLDir()提供更多的选项。该方法作为一个后台进程运行。它支持MSSQLServer,和Sybase。你可以指定一个允许的文件扩展名后缀列表。