GBASE 8s UDR内存管理_02_mi_dalloc
函数mi_dalloc的作用是:在指定的内存持续时间内分配指定的内存量,并返回一个指向所分配块的指针。
1.语法
void *mi_dalloc (size, duration)
mi_integer size;
MI_MEMORY_DURATION duration;
size要分配的字节数。
duration
指定要分配的用户内存的内存持续时间的值。持续时间的有效值如下:
值 |
含义 |
PER_ROUTINE |
在UDR的一次迭代期间 |
PER_COMMAND |
执行当前子查询的持续时间 |
PER_STATEMENT (Deprecated) |
在当前SQL语句的持续时间内 |
PER_STMT_EXEC |
在当前SQL语句的执行期间 |
PER_STMT_PREP |
在当前准备的SQL语句的持续时间内 |
PER_TRANSACTION (Advanced) |
在一次事务期间 |
PER_SESSION (Advanced) |
在当前客户端会话期间 |
PER_SYSTEM (Advanced) |
在数据库服务器执行期间 |
在客户端LIBMI应用程序中有效? |
在用户定义的例程中有效? |
是(但是,应用程序忽略内存持续时间) |
是 |
2.用法
mi_dalloc()函数为一个DataBlade API模块分配大小字节数的共享内存。mi_dalloc()函数是一个用于用户内存的构造函数。这个函数的行为与mi_alloc()完全相同,只是mi_dalloc()允许您在分配时显式地指定内存持续时间。
服务器
对于C UDR中的大多数内存分配,duration参数必须是以下公共内存持续时间常数之一:
PER_ROUTINE(或PER_FUNCTION)
指定PER_ROUTINE,数据库服务器将在UDR返回时释放分配的内存。
PER_COMMAND
指定PER_COMMAND,数据库服务器将在子查询执行完成时释放内存。
PER_STMT_EXEC
指定PER_STMT_EXEC,数据库服务器将在SQL语句执行完成时释放内存。
PER_STMT_PREP
指定PER_STMT_PREP,数据库服务器将在准备好的SQL语句终止时释放内存。
提示:只有在常规内存持续时间不能安全执行需要完成的任务时,才在C UDR中使用高级内存持续时间。这些高级内存持续时间很长,会增加内存泄漏的可能性。
在C UDR中,当引发异常时,数据库服务器自动释放通过mi_dalloc()分配的内存。
重点:在C UDR中,使用DataBlade API内存管理函数来分配内存。使用DataBlade API内存管理函数可以确保数据库服务器能够自动释放内存,特别是在出现返回值或异常的情况下,例程无法释放内存。
当不再需要mi_dalloc()分配的内存时,UDR可以使用mi_free()显式地释放mi_dalloc()分配的内存。
客户端
在客户端LIBMI应用程序中,mi_dalloc()的工作原理与malloc()完全相同:
存储分配在客户机进程的堆上。但是,数据库服务器不会自动释放此内存。因此,客户端LIBMI应用程序必须使用mi_free()函数显式地释放mi_dalloc()进行的所有分配。客户机LIBMI应用程序忽略内存持续时间。
在回调函数中,调用mi_dalloc()请求PER_COMMAND的持续时间将返回NULL。因此,回调函数必须调用mi_dalloc(),其持续时间为PER_ROUTINE。
mi_dalloc()函数返回一个指向新分配内存的指针。转换此指针以匹配您分配的用户定义缓冲区或结构的结构。
3.返回值
指向新分配内存的指针。强制转换此指针以匹配为其分配内存的用户定义缓冲区或结构。
NULL函数无法分配内存。
mi_dalloc()函数在遇到运行时错误时不会抛出MI_Exception事件。因此,该函数不会导致调用回调。
GBASE 8s UDR内存管理_02_mi_dalloc相关推荐
- GBASE 8s数据库参数管理
1.参数文件管理 GBase 8s 数据库服务器的参数文件位于安装目录的etc子目录下,标准参数文件为onconfig.std.我们对onconfig参数文件的管理如下所述. onstat -c打印O ...
- GBase 8s 数据库操作指南
一.数据库日常管理指南 简介: GBase 8s数据库日常管理包括数据库模式的切换,以及服务器的监控.监控主要分为两个方面,一方面是系统级别的监控,主要包括对系统cpu的监控,以及内存的占用情况:另一 ...
- GBase 8s(GDCA)课堂练习题及答案总结
一.单选题 1.GBase 8s的数据库架构是(D)A.单进程.单线程架构B.多进程.单线程架构C.单进程.多线程架构D.多进程.多线程架构2.GBase 8s的停止数据库实例的命令是哪个?(C)A. ...
- oracle加密可以跟java一致吗,在GBase 8s上使用java udr实现Oracle兼容的加密解密功能...
最近碰到客户从Oracle迁移到GBase 8s使用到字段加密解密功能,使用到了Utl_raw.cast_to_varchar2.Utl_raw.cast_to_raw.Utl_encode.base ...
- 南大通用GBase 8s集群权限管理介绍
一.用户管理 用户可以使用CREATE USER语句创建一个新的GBase 8s MPP帐号. 下面我们通过两个示例,来向用户展示创建用户和更改用户密码的操作. 示例1:使用超级用户root登录,创建 ...
- GBase 8s 事务管理
GBase 8s数据库的某些操作的集合可看作一个整体,在这些操作的执行过程中,不受其他操作的影响,这样的一个操作的集合就是事务. 事务(Transaction)是对数据库进行操作的集合.该集合是一个不 ...
- 南大通用GBase 8s数据空间管理
南大通用GBase 8s数据库安装后,创建实例并初始化成功即可正常使用.如果是正式的生产环境,强烈建议对数据文件存储空间进行更为明细的划分,我们需要创建的数据空间一般包括如下几个:rootdbs.pl ...
- GBase 8s SQL 指南:语法————2.2 SQL 语句
ALTER ROUTINE 语句 使用 ALTER ROUTINE 语句更改先前定义的用户定义的例程(UDR)的例程修饰符或路径名.该 语句是 SQL ANSI/ISO 标准的扩展. 语法 元素 ...
- GBase 8s 产品简介
开发背景 南大通用安全数据库管理系统( 简称 GBase 8s), 是具有完全自主知识产权的数据库产品, 该产品符合 SQL92/99. ODBC. OLEDB. JDBC. ADO.NET 等国际 ...
- GBase 8s灾备集群HAC (一) 概述
GBase 8s灾备集群HAC(High Availability Cluster)是被广泛使用的典型的高可用解决方 案.当主节点发生故障时可迅速切换至辅节点,企业的业务不受影响. 1. 同步方式:基 ...
最新文章
- ffmpeg连接超时与解码超时
- 160个Crackme028之对抗花指令
- mov eax,dword ptr fs:[0] 指令
- 分布式与人工智能课程(part10)--图像库的基本使用
- 机器学习入门系列(2)--机器学习概览(下)
- 《C和指针》——数组的奇怪形式
- python菜单栏添加子菜单_python添加菜单图文讲解
- python模拟超市抹零_Python基础练习二超市存包柜模拟
- 苹果6代掉水里怎么办 iPhone6掉水处理方法
- c mysql开发工具_Windows平台下Mysql C程序设计
- ExoPlayer在开启循环播放时的尴尬情况
- Ubuntu下ssh安装、配置及使用
- 接触Firefox的xpi
- 解决qt.qpa.plugin: Could not load the Qt platform plugin “xcb“问题
- flashfxp连接失败,flashfxp连接失败怎么办
- 交换机和路由器的区别_一文读懂交换机和路由器的区别
- CF1715D 2+ doors 题解
- 英特尔i5 1240H
- 解决 “VS2015 的warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”的方法
- 如何应对数千微服务组件带来的挑战?