一、监控指标采集

1.慢日志采集

开启慢日志:将数据库配置文件dm.ini中的SVR_LOG参数设为1则打开慢日志,默认在数据库软件安装目录下的log目录下可以查看慢日志。慢日志的具体参数可通过sqllog.ini进行设置。

2.锁的查看

Sql语句

作用

SELECT*FROMV$SESSION

查看会话和锁的信息

SELECT*FROMV$SESSION_WAIT

查看等待的会话信息

SELECT*FROMV$LOCK

系统中所有锁

SELECT*FROMV$LOCKED_OBJECT

系统中DML锁

3.高可用状态的查看

在监控服务器下,以dmmonitor.ini为参数执行dmmonitor,打开监视器服务(如:./dmmonitor./dmmonitor.ini),dmmonitor放在安装目录下的bin目录下。打开监视服务后,输入show,可以查看集群各节点状态)。

4.读写分离状态查看和配置

在dm_svc.conf文件(放在/etc目录下)里的RW_SEPARATE属性可配置是否使用读写分离系统,默认0,取值(0不使用,1使用)。RW_PERCENT属性可以配置分发到主库的事务占主备库总事务的百分比,有效值0~100,默认值25。另外也可以从jdbc连接串里面用同样的属性名来配置,但一般配置在dm_svc.conf中。

二、监控可视化展示----DEM监控

1.概述

登陆DEM工具,目前是部署在集群监视器所在的10.7.211.36服务器,用浏览器访问http://10.7.211.36:8080/dem/,默认账号admin密码888888即可进入监控服务工具dem,整个监控的查看以及设置可以通过可视化方式进行。另外,安装数据库软件的同时,也会同时安装DM性能监视客户端,也可以通过该客户端进行监视(客户端可以安装在自己的计算机上,通过远程方式监视各服务器上的数据库)。

2.系统结构

3.实现原理

如上图,DEM监控主要由dmagent收集数据库或主机信息,发送给DEM服务,DEM服务把监控信息存储在后台库中,通过检索DEM后台库,把监控信息显示到前端。

其中,dmagent会分别启动gather线程去收集各监控信息如果dmagent发送信息失败,即dmagent与DEM掉线的情况下,则gather线程会把消息保存在本地(dmagent安装目录的data目录下),dmagent会有一个flush线程用于刷盘,还有一个send线程用于发送离线信息。当有信息发送失败时,就会把失败信息放到消息队列中,刷盘线程从消息队列取出信息,写到文件。Send线程会每隔一段时间(默认5分钟),读取文件信息,发送给DEM。

4主机监控

DEM在主机监控页面,列出监控主机的状态,CPU,内存,磁盘以及网络等信息,并可以通过动作,完成统计,分析,配置以及升级等操作。

主机监控页面每隔1分钟(该值可以通过配置参数”页面状态刷新频率”配置)会自动刷新主机监控信息。在主机监控页面的最右侧会显示最新监测时间,表示所有主机中,收到到最新的主机信息的时间。

4.1添加主机监控

以monitor模式启动dmagent,会自动添加主机信息到DEM主机监控页面。

启动dmagent(详细见第3章dmagent部署)后,如果是以monitor模式启动,则dmagent会收集主机信息发送给DEM,DEM把主机监控信息存储在DEM后台库。

然后DEM主机监控页面,每隔1分钟(管理员或超级管理员可以配置”页面状态刷新频率”来修改该值),会从DEM后台库中拉取主机信息,展示到DEM主机监控页面。

4.2主机监控项

监控项

说明

主机

显示主机地址和主机的状态。

鼠标停留在主机列,可以显示主机的其他一些信息,如下图所示:

其中监测时间为最近一次收到该主机信息的时间。

当主机名前出现红色叹号图标时,表示主机可能存在以下异常情况:

1.主机未进行网络配置;

2.主机上的数据库代理版本过低

连接

连接是否正常,表示连接正常,表示连接失败

CPU

cpu使用率

CPU等待

cpu等待时间占比。

内存

内存使用率。

交换区

交换区使用率。

磁盘读

磁盘读取速率。

磁盘写

磁盘写入速率。

网络读

网络接收速率。

网络写

网络发送速率。

警告

警告通知数量。点击打开告警历史面板。

操作

点击将弹出操作菜单,详细介绍请参见下述主机监控操作。

4.3主机监控操作

在DEM主机监控页面,每一行主机最右侧的”操作”栏,可以点击下拉按钮,可以看到弹出的下拉列表里包含了对每个主机监控的操作。

另外可以点击工具栏的”更多”按钮,弹出的下拉列表里包含了对选中主机或全局的操作。

4.3.1主机负载统计

统计主机负载的历史信息,可以查看最近一周的每个时间点的主机内存,CPU,磁盘IO,网络IO信息,通过这些负载信息,在数据库实例变慢时,可以通过该统计信息,展示数据库实例所在的主机资源使用情况,从而帮助确认性能问题的根本原因。

路径:监控及告警->主机->列表”操作栏”->下拉按钮->负载统计,如下图所示:

4.3.2磁盘分析

统计磁盘使用的历史信息,可以查看最近一周的每个时间点的磁盘使用情况,详细的可以查看每个时间点的磁盘分区,每个分区的磁盘使用率,每个分区的读写IO,以及整个磁盘的使用率等。

路径:监控及告警->主机->列表”操作栏”->下拉按钮->磁盘分析,如下图:

4.3.3自定义监控

通常除了数据库和主机监控之外,我们还需要监控其他程序或脚本的执行情况(执行结果,成功/失败),但往往这都是根据实际应用需求来的,无法详列,所以只能自定义,根据实际情况来自定义指定要监控的程序或脚本,这样可以适用更多的监控场景。dmagent会按一定频率(配置参数”主机可执行程序执行频率”),执行自定义的程序或脚本,并把结果发给DEM,DEM显示自定义的程序或脚本的执行情况。

路径:监控及告警->主机->列表”操作栏”->下拉按钮->自定义监控

  1. 添加自定义监控:在自定义监控面板点击”添加”,打开添加自定义监控对话框,如下所示:

指定名称,和程序或脚本路径,点击”确定”即可。

  1. 自定义监控详情:可以在自定义监控页面,查看每个自定义的监控项的最近执行时间,最近执行状态,最近执行结果,最近执行信息等,并可以通过”详情”栏的按钮操作,查看执行历史和执行结果曲线图。
  2. 自定义监控启用和禁用

通过启用和禁用来开启或停止自定义的监控项。启用和禁用方式:在添加自定义监控时,选择是否启用。在自定义监控面板的监控列表中,点击”启用”栏的启用/禁用按钮。

4.3.4 进程监控

通常除了数据库和主机监控之外,我们还需要监控其他进程的资源使用情况(比如需要监控dmagent的资源占用情况),但往往这都是根据实际应用需求来的,无法详列,所以只能自定义,根据实际情况来自定义指定要监控的进程这样可以适用更多的监控场景。dmagent会按一定频率(配置参数”主机进程监控频率”),收集相关进程的信息,并把结果发给DEM,DEM显示进程的状态和资源使用情况。

路径:监控及告警->主机->列表”操作栏”->下拉按钮->进程监控。

(1)添加进程监控:在自定义监控面板点击”添加”,打开添加进程监控对话框,如下所示:指定名称和进程过滤条件,点击”确定”即可。

其中名称为自定义的监控的标识。进程过滤条件为dmagent搜索要监控进程的过滤条件,当进程启动命令中包含过滤条件时,则认为是需要监控的进程,否则不是。

例如:机器上启动了2个dmserver,启动命令分别为dmserverd:/data/dameng/dm.ini和dmserverd:/data1/dameng/dm.ini。如果要监控dmserver,则可以指定名称”dmserver”(名称只起标识左右),过滤条件”dmserver”,这时会监控这2个dmserver的进程,如果添加监控后,又启动了一个dmserver,则也会监控新启动的dmserver进程。即会监控这台电脑上启动的所有启动命令中包含”dmserver”的进程。如果只需监控dmserverd:/data/dameng/dm.ini这一个进程,则进程过滤条件指定为进程启动命令”dmserverd:/data/dameng/dm.ini”。

(2)进程监控信息

可以在进程监控页面查看添加的进程监控的信息,如下图所示:此页面显示搜索到进程的最新信息,包括进程ID,进程状态,运行时间,CPU,内存,VSZ,RSS,磁盘I/O已经启动进程命令等。按添加的进程监控信息分组显示,组下面为具体的从主机收集到的进程信息。可以对进程监控进行编辑,删除,启用和禁用操作,以及查看历史信息操作。

也可以对具体的主机的进程进行查看详情的操作。具体如下:

a)进程监控编辑:

在进程监控面板的监控列表中,点击最右侧”操作栏”的进程监控的下拉列表,选择”编辑”按钮,打开”编辑进程监控”对话框,可以对进程监控名称和过滤条件进行重新编辑。

b)进程监控删除:

在进程监控面板的监控列表中,点击最右侧”操作栏”的进程监控的下拉列表,选择”删除”按钮,删除进程监控,不再对相应的进程进行监控。

c)进程监控启用和禁用

通过启用和禁用来开启或停止进程监控。

启用和禁用方式:1.在添加进程监控时,选择是否启用。

2.在进程监控面板的监控列表中,点击最右侧”操作栏”的进程监控的下拉列表,

选择”启用/禁用”按钮

d)进程监控历史记录

在进程监控面板的监控列表中,点击最右侧”操作栏”的进程监控的下拉列表,选择”历史记录”按钮,打开查看进程监控历史记录的对话框,如下图所示:

可以查看该进程监控最近一周的历史信息。

进程监控历史信息包括进程运行情况,和最近一周所有搜索到的进程列表。

其中进程个数变化曲线图显示所选时间段的进程个数变化情况;进程运行时间图

显示每一个进程的运行时间周期。进程列表,显示所选时间段的搜索到进程的列表。选中进程个数变化曲线图的点,对应的进程列表中会选择对应的进程,以显示该点中存在的是哪几个进程。

选中进程运行时间图的点,对应的进程列表中会选择对应的进程,以显示对应进

程号的进程的具体信息。

进程列表中最右侧的”操作”栏,点击”详细信息”按钮,可以查看具体进程的详细

情况。具体见以下”具体进程详细信息”介绍。

e)具体进程详细信息

在进程监控面板的监控列表中,点击最右侧”操作栏”的具体进程的”详细信息”按钮,打开具体进程的详细信息面板,可以查看具体进程的资源使用历史,如下图所示:

显示选中时间段的进程详细信息,默认半小时内,最长时间间隔为7天。显示内容为概述和资源,其中概述包括进程名,所属用户,启动时间以及所在主机的主机名,系统,CPU和内存等信息。资源包括进程和主机内存使用情况,进程和主机CPU使用情况,进程和主机磁盘IO,进程打开文件数,进程VSZ,进程RSS以及进程的线程数等信息。

4.3.5配置网络

若主机有多个网卡,需要用户手动配置网络环境。所谓的网络环境是指数据库代理连接

数据库收集监控信息的ip地址(内网IP),以及DEM中心与数据库代理进行通信的ip地址(外网IP)。

路径:

⚫监控及告警->主机->列表”操作栏”->下拉按钮->配置网络

⚫监控及告警->主机->工具栏->更多按钮->配置网络

配置网络对话框如下所示:配置完成,点击”保存”按钮,保存配置信息。

4.4数据库监控

DEM在数据库监控页面,列出监控数据库实例的状态,运行时间,CPU,内存,交换区,会话,事务,等待任务数,磁盘以及网络等信息,并可以通过数据库实例各种分析,配置,启停等操作。

数据库监控页面每隔1分钟(该值可以通过配置参数”页面状态刷新频率”配置)会自动刷新数据库监控信息。在数据库监控页面的最右侧会显示最新监测时间,表示所有数据库中,收到最新的数据库信息的时间。

4.4.1数据库组

数据库组,是为了把多个数据库实例监控信息显示在一起,并且可以给整个组提供一些操作。通常的对于数据库集群,集群中包含的组件自然的分到一个组中(也强烈建议分到一个组),这样方便提供一些集群特有的操作。同时,对于其他数据库实例,为了在数据库监控页面显示在一起,并可以通过一键做相同的操作,可以把这些数据库分为一个组。

4.4.2添加数据库监控

在数据库监控页面的工具栏,点击添加按钮,可以选择添加”单机”或”集群”。

如下添加单机:

填写数据库连接信息,点击”确定”。

如下添加集群:

填写集群名称,添加站点(数据库实例),站点的添加,可以通过站点扫描的方式添加,

点击”站点扫描”,填写数据库集群的主站点连接信息,DEM会自动扫描出集群的其他站点信息。点击”确定”,添加集群监控到数据库监控页面。

4.4.3数据库监控操作

数据库监控操作包括对每个数据库实例的操作,也有对数据库组的操作,包括:

(1)辅助组件管理:数据库或组的运行通常会有些辅助组件来完成一些功能,比如数据守护环境,对应数据库实例会有一个dmwacher组件来辅助拉起数据库,DMDSC环境,对应数据库实例会有DMASM,DMCSS组件,再比如DMTDD环境,数据库或组为前端库,而存储需要dcs,drs,dss等相关组件的协同工作完成。

路径:

监控及告警->数据库->列表”操作栏”->组或数据库实例下拉按钮->辅助组件管理

打开辅助组件管理,可以对数据库或组相关辅助组件进行管理。

(2)AWR报告

用于查看当前数据库实例的AWR报告。报告中包括以下几个部分:

•概述

数据库及所在主机的基本信息。

•资源

数据库及其所在主机的资源使用情况曲线图。包括内存,CPU,网络IO,文件IO。

鼠标移动到曲线图上,可以查看具体每个时间点的资源使用情况。

•性能

反映数据库性能指标的曲线图。包括TPS(每秒事务数),QPS(每秒请求数),DML(每秒操作数,包括插入,更新,删除),DDL(每秒DDL操作数),DB等待任务数,DB任务平均等待时间,归档等待任务数,归档任务平均等待时间。鼠标移动到曲线图上,可以查看具体每个时间点的性能指标情况。

•会话

数据库会话数和线程数曲线图。包括会话数(总会话和活动会话),以及DB线程数。

鼠标移动到曲线图上,可以查看具体每个时间点的会话情况或者是DB线程数。

•SQL

数据库执行sql的统计信息,包括TOP20条慢SQL和TOP20条高频sql。•死锁

数据库最近20次死锁信息。

•登录异常

数据库最近20次用户异常登录信息。

路径:

监控及告警->数据库->列表”操作栏”->数据库实例下拉按钮->AWR报告

如下图所示:

(3)表空间分析

用于查看最近一段时间内数据库实例各个表空间的使用情况。

路径:监控及告警->数据库->列表”操作栏”->数据库实例下拉按钮->表空间分析。

表空间分析页面如下:

上面表格为收集到的最新的表空间监控信息。

下面曲线图为各时间段的每个表空间的使用率,通过最上面的时间按钮,切换查看不同

时间段内的表空间使用情况。

(4)SQL分析

用于查看最近一段时间内数据库实例执行的sql语句。

路径:监控及告警->数据库->列表”操作栏”->数据库实例下拉按钮->SQL分析

如下图所示:

通过工具栏的时间段和类别按钮,可以查看指定时间段的慢SQL,高频SQL,和错误SQL。

其中,

•慢SQL,为SQL执行时间超过500毫秒(该值通过配置参数”数据库慢SQL界定时间”

确定)的SQL语句

•高频SQL,为执行次数最多的前50条SQL语句。

•错误SQL,即执行出错的SQL语句。

SQL语句超长表格中会隐藏超长部分,如果想查看完整的sql信息或者想拷贝sql语句

可以双击行数据打开SQL详细信息对话框。

登陆锁定

用于查看最近一段时间内数据库用户登录被锁定的历史记录。

路径:监控及告警->数据库->列表”操作栏”->数据库实例下拉按钮->登录锁定

如下图所示:

通过切换时间按钮,可以查看不同时间段的登录锁定信息。

(5)死锁分析

用于查看最近一段时间内数据库发生死锁的历史记录。

路径:监控及告警->数据库->列表”操作栏”->数据库实例下拉按钮->死锁分析

如下图所示:

通过切换时间按钮,可以查看不同时间段的数据库发生的死锁信息。

(6)会话分析

用于查看最近一段时间内数据库实例或组会话数变化情况。

路径:监控及告警->数据库->列表”操作栏”->组或数据库实例下拉按钮->会话分析

如下图所示:切换时间按钮,可以查看不同时间段的会话信息。会话数图表中显示的是总会话数和活动会话数变化曲线图。横坐标是时间,纵坐标是会话数。鼠标放到曲线图的某一点上可以查看该时刻的详细信息。当图表跨时间段较长不好定位到具体的时间点时,可以拖动图表下方的标尺,临时放大指定区间的曲线图。下面会话信息列表中为当前所选时间段内的会话信息。列表中的记录按时间降序排列,如果查看某个数据库实例的话则按日期分组显示,如果查看组的会话信息的话,则按数据库实例分组显示。

(7)事件分析

用于查看最近一段时间内数据库实例事件等待情况。

路径:

监控及告警->数据库->列表”操作栏”->数据库实例下拉按钮->事件分析

如下图所示:

切换时间按钮,可以查看不同时间段的事件等待情况。

上面事件等待时间图表:图表中显示的是最长等待时间排名前5的五种事件类型的曲线图。横坐标是时间,纵坐标是等待时间,单位1/100秒。

下面事件等待信息列表:记录当前所选时间段内的事件等待信息。列表中的记录按日期分组显示。

(8)自定义sql监控

通常除了给出的会话,登录,表空间监控之外,我们还需要监控数据库参数,但往往这都是根据实际应用需求来的,无法详列,所以只能自定义,根据实际情况来自定义指定要监控的SQL这样可以适用更多的监控场景。dmagent会按一定频率(配置参数”数据库自定义SQL监控频率”),执行自定义的SQL,并把结果发给DEM,DEM显示自定义的SQL的执行情况。

自定义SQL监控,必须先添加自定义SQL,SQL监控信息从添加后的一个收集频率后开始收集。

路径:

监控及告警->数据库->列表”操作栏”->组或数据库实例下拉按钮->自定义SQL监控

如下图所示:

可以查看自定义sql执行状态,执行结果等,如果执行失败,可以查看具体的失败原因。

并可以查看自定义SQL的执行历史,和执行结果曲线图。

自定义SQL执行历史

查看sql语句执行的历史信息。

如下图所示:

自定义SQL执行结果曲线图

查看SQL历史执行结果信息。

如下图所示:

(9)表数据监控

用于查看数据库的表数据监控信息。

表数据监控,必须先添加表监控,监控信息从添加后的一个收集频率后开始收集。

路径:监控及告警->数据库->列表”操作栏”->组或数据库实例下拉按钮->表数据监控

如下图所示:

切换时间按钮,可以查看不同时间段的表数据行数。

(10)集群分析用于查看集群的实时监控信息。报告中包括以下几个部分:

•概述

集群站点基本信息。包括实例,连接,状态,归档,服务器版本,数据库版本,启动时

间等

•会话

集群各站点的会话分布情况。

•表空间

集群各站点的表空间使用情况。

•表监控

表数据在各集群各站点的分布情况,如下图所示:

在表格上方的选择框中选择一个表进行查看。

•表锁

集群表锁信息,如下图所示:

在表格上方的选择框中选择一个表进行查看。

•死锁

集群各站点最近发生的20次死锁信息。

路径:

监控及告警->数据库->列表”操作栏”->组下拉按钮->集群分析

如下图所示:

三、监控告警推送

在dem工具左侧的智能运维选项卡下面有监控告警选项,点进去之后可以设置各种报警的场景,如内存使用率,cpu使用率,磁盘使用率,交换区使用率等大于设定值,连接异常等情况下进行告警,可以设置告警方式为邮件,短信,其他方式进行告警需要进行接口开发。为了以免费方式进行告警,方案采用邮件告警的方式进行。具体可设定的告警参数如下:

具体方法如下图:

首先通过浏览器访问DEM工具,然后在左侧监控管理方框内选择“系统设置”选项,然后在右侧页面找到系统邮箱配置,即可配置告警邮箱。

达梦数据库综合监控方案相关推荐

  1. zabbix mysql 表空间_Zabbix监控达梦数据库表空间

    技术实现思路 利用Zabbix监控工具的定制功能.借鉴Zabbix对Oracle的监控原理,实现达梦数据库表空间监控.通过自动发现脚本发现达梦数据库表空间,然后再制定额外的属于达梦表空间的监控项,配置 ...

  2. 2数据库表空间容量查询_Zabbix监控达梦数据库表空间

    技术实现思路 利用Zabbix监控工具的定制功能.借鉴Zabbix对Oracle的监控原理,实现达梦数据库表空间监控.通过自动发现脚本发现达梦数据库表空间,然后再制定额外的属于达梦表空间的监控项,配置 ...

  3. 达梦数据库监控-DEM 部署

    环境准备 DEM war 包 Tomcat JAVA 1.8 达梦数据库 其中 DEM war 包在达梦安装目录下/web/dem.war. Tomcat 需要自己准备,与要部署的机器版本匹配即可. ...

  4. 达梦数据库实验五:DBMS综合设计

    目录标题 实验五 DBMS综合设计 一.实验目的: 二.实验要求: 三.实验重点和难点: 四.实验内容: 五.实验步骤与结果: 1. 概念设计 2. 逻辑设计 2.1根据ER图转换为世界的关系模型,找 ...

  5. python监控达梦数据库

    概述 dmPython是DM提供的依据Python DB API version 2.0中API使用规定而开发的数据库访问接口.使用API能对DM数据库进行访问. dmPythonn 接口当前版本号为 ...

  6. 达梦数据库运维监控之DEM

    一.DEM概述 DEM 全称为 Dameng Enterprise Manager.本工具主要提供如下功能: 客户端工具.用户能够通过 DEM 工具来进行 DM 数据库的对象管理.状态监控.SQL 查 ...

  7. 达梦数据库监控正在执行的长SQL

    我们在运维中经常会遇到一个需求:就是业务组请求支援,说跑批卡死,要求定位出哪条长SQL语句在执行.确认语句无误后kill掉该会话. 在ORACLE数据库中,v$session视图中有一个SQL_EXE ...

  8. 【达梦数据库】DM 集群简介

    文章目录 前言 一.数据守护 (Data Watch) 1.1 概念介绍 1.2 实现原理 1.3 组成构件 1.4 配置文件 1.5 系统特性 1.6 术语定义 1.7 解决方案 二.实时主备集群 ...

  9. 关系型数据库迁移达梦数据库

    前言 本文章描述对于金融机构纷纷转用国产数据库进行市场调研,在业务背景中做了粗略说明.同时详细介绍达梦数据库特性和优势.在项目中通常会使用第三方组件,在文章中以Flowable为例提供了解决方案. 业 ...

最新文章

  1. POJ 3258:River Hopscotch (最大化最小值)
  2. java.sql.SQLException: Data truncation: Truncated incorrect DOUBLE value
  3. ALEIDoc EDI(5)--Inbound Function
  4. 通过 SAP Spartacus 的 Component 映射机制,更改默认购物车 Cart 页面
  5. Redis-ha(sentinel)搭建
  6. mac怎么设置默认浏览器 mac默认浏览器设置方法
  7. 开发者工具保留调用连接_如何整理您的开发者资料并保留旧的简历
  8. Python版C语言词法分析器
  9. HDU1215 七夕节【水题】
  10. 精彩的javascript对象和数组混合相加
  11. 观察者模式和java委托
  12. python语音识别_Python语音识别终极指南
  13. 台电平板(X80HD)刷WIN10
  14. python调用rf关键字_RobotFramework之关键字
  15. 文心一格x网易「EVE宇宙航母预研」主题AI绘画大赛即将开启!
  16. 城市信息模型基础平台(CIM)产品白皮书
  17. 图:美国首颗“嗅碳”卫星发射失败坠海
  18. linux优麒麟iso镜像,优麒麟 Linux x64 17.04
  19. 小米6鲁大师html5评测,小米6跑分超110万?鲁大师官方:网友PS的图片
  20. 一个水藻,经过两天的生长后,从第3天开始每天都会分裂出一个新藻,而分裂出的新藻同样经过两天的生长,也会从第3天开始每天分裂出一个新藻,问经过n天后,共有多少个水藻存在。暂时不考虑藻死亡的情况。

热门文章

  1. Scroll LocK键的作用
  2. 【区块链108将】万链资本郝泽萱:我们要做区块链领域的红杉和高盛
  3. 上海亚商投顾:创业板指低开高走ChatGPT概念股再爆发
  4. 目标进程已退出,但未引发 CoreCLR 启动事件
  5. 分布式datax CDC架构设计
  6. IE6使用技巧27则
  7. 批处理注释格式,环境变量扩展
  8. 疫情下就业形势怎样?存在抗衰行业吗?
  9. 百度超级链恭祝大家新年快乐、兔年吉祥!
  10. 如何用js求对数运算