데이터 베이스 MySQL 튜토리얼 PostgreSQL 聚合函数共享申请的内存空间

PostgreSQL 聚合函数共享申请的内存空间

Jun 07, 2016 pm 02:50 PM
c postgresql 공유됨 메모리 기능 적용하다 공간 중합

CREATE AGGREGATE Rbitmap_union2 (Rbitmap)( sfunc = myfunction, stype = mytype, FINALFUNC = myfunction_final); 在编写聚合函数时,对每一行都会重复调用指定同一函数,如果要处理的数据是累加的,那么如果不在每次调用之间共享内存空间,而是不停的申

CREATE AGGREGATE Rbitmap_union2 (Rbitmap)
(
    sfunc = myfunction,
    stype = mytype,
    FINALFUNC = myfunction_final
);
로그인 후 복사

在编写聚合函数时,对每一行都会重复调用指定同一函数,如果要处理的数据是累加的,那么如果不在每次调用之间共享内存空间,而是不停的申请释放新的内存,那么速度会变得很慢,所以在这时共享内存是十分有用的:


PostgreSQL 有 MemoryContext 的概念,如果普通的使用 palloc 申请内存空间,系统会向 CurrentMemoryContext 申请,而据我试验猜测,聚合函数在每次调用时,都会切换 CurrentMemoryContext,所以普通的 palloc 是不能使用的。



在使用 Version 1 Calling Conventions 时,有如下宏定义, PG_FUNCTION_ARGS 是我们编写函数的实际入参:
#define PG_FUNCTION_ARGS	FunctionCallInfo fcinfo
로그인 후 복사

FunctionCallInfo 是指向 FunctionCallInfoData 结构的指针:

/*
 * This struct is the data actually passed to an fmgr-called function.
 */
typedef struct FunctionCallInfoData
{
	FmgrInfo   *flinfo;			/* ptr to lookup info used for this call */
	fmNodePtr	context;		/* pass info about context of call */
	fmNodePtr	resultinfo;		/* pass or return extra info about result */
	Oid			fncollation;	/* collation for function to use */
	bool		isnull;			/* function must set true if result is NULL */
	short		nargs;			/* # arguments actually passed */
	Datum		arg[FUNC_MAX_ARGS];		/* Arguments passed to function */
	bool		argnull[FUNC_MAX_ARGS]; /* T if arg[i] is actually NULL */
} FunctionCallInfoData;
로그인 후 복사
其中的 flinfo 指向 FmgrInfo
typedef struct FmgrInfo
{
	PGFunction	fn_addr;		/* pointer to function or handler to be called */
	Oid		fn_oid;			/* OID of function (NOT of handler, if any) */
	short		fn_nargs;		/* number of input args (0..FUNC_MAX_ARGS) */
	bool		fn_strict;		/* function is "strict" (NULL in => NULL out) */
	bool		fn_retset;		/* function returns a set */
	unsigned char fn_stats;		/* collect stats if track_functions > this */
	<span style="color:#ff0000;">void	   *fn_extra</span>;		/* extra space for use by handler */
	<span style="color:#ff0000;">MemoryContext fn_mcxt</span>;		/* memory context to store fn_extra in */
	fmNodePtr	fn_expr;		/* expression parse tree for call, or NULL */
} FmgrInfo;
로그인 후 복사

我们只要在 fn_mcxt 这个 MemoryContext 下申请内存,就可以让它保持在整个聚合的过程中,申请到的内存块指针,可以存放到 fn_extra 中,也可以作为返回值和入参传递在每次调用间,最后使用 FINALFUNC 指定的函数进行最终处理。


向指定 MemoryContext - fn_mcxt 申请内存的函数如下:

MemoryContextAlloc(fcinfo->flinfo->fn_mcxt, sizeof(some_type));
로그인 후 복사
它会返回一个指向申请内存空间的 void * 指针。

可以参考 src/backend/utils/adt/arrayfuncs.c 以及下列文章。

参考文章:

http://stackoverflow.com/questions/30515552/can-a-postgres-c-language-function-reference-a-stateful-variable-c-side-possibl

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

대용량 메모리 최적화, 컴퓨터가 16g/32g 메모리 속도로 업그레이드했는데 변화가 없다면 어떻게 해야 하나요? 대용량 메모리 최적화, 컴퓨터가 16g/32g 메모리 속도로 업그레이드했는데 변화가 없다면 어떻게 해야 하나요? Jun 18, 2024 pm 06:51 PM

기계식 하드 드라이브나 SATA 솔리드 스테이트 드라이브의 경우 소프트웨어 실행 속도의 증가를 느낄 수 있지만 NVME 하드 드라이브라면 느끼지 못할 수도 있습니다. 1. 레지스트리를 데스크탑으로 가져와 새 텍스트 문서를 생성하고, 다음 내용을 복사하여 붙여넣은 후 1.reg로 저장한 후 마우스 오른쪽 버튼을 클릭하여 병합하고 컴퓨터를 다시 시작합니다. WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement]"DisablePagingExecutive"=d

소식통에 따르면 삼성전자와 SK하이닉스는 2026년 이후 적층형 모바일 메모리를 상용화할 것으로 보인다. 소식통에 따르면 삼성전자와 SK하이닉스는 2026년 이후 적층형 모바일 메모리를 상용화할 것으로 보인다. Sep 03, 2024 pm 02:15 PM

3일 홈페이지 보도에 따르면 국내 언론 에트뉴스는 어제(현지시간) 삼성전자와 SK하이닉스의 'HBM형' 적층구조 모바일 메모리 제품이 2026년 이후 상용화될 것이라고 보도했다. 소식통에 따르면 두 한국 메모리 거대 기업은 적층형 모바일 메모리를 미래 수익의 중요한 원천으로 여기고 'HBM형 메모리'를 스마트폰, 태블릿, 노트북으로 확장해 엔드사이드 AI에 전력을 공급할 계획이라고 전했다. 이 사이트의 이전 보도에 따르면 삼성전자 제품은 LPWide I/O 메모리라고 하며 SK하이닉스는 이 기술을 VFO라고 부른다. 두 회사는 팬아웃 패키징과 수직 채널을 결합하는 것과 거의 동일한 기술 경로를 사용했습니다. 삼성전자 LPWide I/O 메모리의 비트폭은 512이다.

Lexar, Ares Wings of War DDR5 7600 16GB x2 메모리 키트 출시: 하이닉스 A-다이 입자, 1,299위안 Lexar, Ares Wings of War DDR5 7600 16GB x2 메모리 키트 출시: 하이닉스 A-다이 입자, 1,299위안 May 07, 2024 am 08:13 AM

5월 6일 이 웹사이트의 소식에 따르면 Lexar는 Ares Wings of War 시리즈 DDR57600CL36 오버클럭 메모리를 출시했습니다. 16GBx2 세트는 5월 7일 0시에 예약 판매가 가능하며 가격은 50위안입니다. 1,299위안. Lexar Wings of War 메모리는 Hynix A-die 메모리 칩을 사용하고 Intel XMP3.0을 지원하며 다음 두 가지 오버클러킹 사전 설정을 제공합니다. 7600MT/s: CL36-46-46-961.4V8000MT/s: CL38-48-49 -1001.45V 방열 측면에서는 이 메모리 세트에는 1.8mm 두께의 올 알루미늄 방열 조끼가 장착되어 있으며 PMIC 독점 열 전도성 실리콘 그리스 패드가 장착되어 있습니다. 메모리는 8개의 고휘도 LED 비드를 사용하고 13개의 RGB 조명 모드를 지원합니다.

AI 물결의 영향은 분명합니다. TrendForce는 이번 분기에 DRAM 메모리 및 NAND 플래시 메모리 계약 가격 인상에 대한 예측을 수정했습니다. AI 물결의 영향은 분명합니다. TrendForce는 이번 분기에 DRAM 메모리 및 NAND 플래시 메모리 계약 가격 인상에 대한 예측을 수정했습니다. May 07, 2024 pm 09:58 PM

TrendForce 조사 보고서에 따르면 AI 물결은 DRAM 메모리와 NAND 플래시 메모리 시장에 상당한 영향을 미칩니다. 5월 7일 이 사이트의 뉴스에서 트렌드포스는 오늘 최신 연구 보고서에서 이번 분기에 두 가지 유형의 스토리지 제품에 대한 계약 가격 인상을 인상했다고 밝혔습니다. 구체적으로 트렌드포스는 당초 2024년 2분기 DRAM 메모리 계약 가격이 3~8% 인상될 것으로 추정했는데, 현재 NAND 플래시 메모리 기준으로는 13~18% 증가할 것으로 추정하고 있다. ~18%이고 새로운 추정치는 15% ~20%이며 eMMC/UFS만 10%의 더 낮은 증가율을 갖습니다. ▲이미지 출처 TrendForce TrendForce는 소속사가 당초 계속해서

Kingbang은 CAMM2, LPCAM2 및 일반 모델 중에서 선택할 수 있는 새로운 DDR5 8600 메모리를 출시했습니다. Kingbang은 CAMM2, LPCAM2 및 일반 모델 중에서 선택할 수 있는 새로운 DDR5 8600 메모리를 출시했습니다. Jun 08, 2024 pm 01:35 PM

6월 7일 이 사이트의 소식에 따르면 GEIL은 2024년 타이페이 국제 컴퓨터 쇼에서 최신 DDR5 솔루션을 출시했으며 선택할 수 있는 SO-DIMM, CUDIMM, CSODIMM, CAMM2 및 LPCAM2 버전을 제공했습니다. ▲사진출처: Wccftech 사진에서 볼 수 있듯이 진방이 전시한 CAMM2/LPCAMM2 메모리는 매우 컴팩트한 디자인을 채택해 최대 128GB의 용량과 최대 8533MT/s의 속도를 제공할 수 있다. 보조 냉각 없이 9000MT/s까지 오버클럭된 AMDAM5 플랫폼에서 안정적입니다. 보고서에 따르면 Jinbang의 2024 Polaris RGBDDR5 시리즈 메모리는 최대 8400을 제공할 수 있습니다.

Vivo의 새로운 X100 시리즈 메모리, 색상 노출: 모든 시리즈는 12+256GB부터 시작 Vivo의 새로운 X100 시리즈 메모리, 색상 노출: 모든 시리즈는 12+256GB부터 시작 May 06, 2024 pm 03:58 PM

5월 6일 뉴스에 따르면, vivo는 새로운 vivo X100 시리즈가 5월 13일 19시에 공식 출시된다고 오늘 공식 발표했습니다. 이번 컨퍼런스에서는 vivoX100s, vivoX100sPro, vivoX100Ultra 등 3가지 모델과 비보가 자체 개발한 이미징 브랜드 BlueImage 블루프린트 이미징 기술이 공개될 것으로 예상된다. 디지털 블로거 '디지털 채팅 스테이션'도 오늘 이 세 가지 모델의 공식 렌더링, 메모리 사양, 색상 매칭을 공개했습니다. 그 중 X100s는 직선형 화면 디자인을 채택한 반면, X100sPro와 X100Ultra는 곡선형 화면 디자인을 채택했습니다. 블로거는 vivoX100s가 블랙, 티타늄, 시안, 화이트 등 4가지 색상으로 출시된다고 밝혔습니다.

Excel 함수 수식의 전체 모음 Excel 함수 수식의 전체 모음 May 07, 2024 pm 12:04 PM

1. SUM 함수는 열이나 셀 그룹의 숫자를 합하는 데 사용됩니다(예: =SUM(A1:J10)). 2. AVERAGE 함수는 열이나 셀 그룹에 있는 숫자의 평균을 계산하는 데 사용됩니다(예: =AVERAGE(A1:A10)). 3. COUNT 함수, 열이나 셀 그룹의 숫자나 텍스트 수를 세는 데 사용됩니다. 예: =COUNT(A1:A10) 4. IF 함수, 지정된 조건을 기반으로 논리적 판단을 내리고 결과를 반환하는 데 사용됩니다. 해당 결과.

DDR5 MRDIMM 및 LPDDR6 CAMM 메모리 사양 출시 준비 완료, JEDEC에서 주요 기술 세부 정보 공개 DDR5 MRDIMM 및 LPDDR6 CAMM 메모리 사양 출시 준비 완료, JEDEC에서 주요 기술 세부 정보 공개 Jul 23, 2024 pm 02:25 PM

7월 23일 이 홈페이지의 소식에 따르면, 마이크로 전자공학 표준 제정 기관인 JEDEC 솔리드 스테이트 기술 협회(JEDEC Solid State Technology Association)는 현지 시간으로 22일 DDR5MRDIMM 및 LPDDR6CAMM 메모리 기술 사양이 곧 공식 출시될 것이라고 발표하고 이 두 가지의 주요 세부 사항을 소개했습니다. 추억. DDR5MRDIMM의 "MR"은 MultiplexedRank를 의미하며, 이는 메모리가 두 개 이상의 랭크를 지원하고 추가적인 물리적 연결 없이 단일 채널에서 여러 데이터 신호를 결합 및 전송할 수 있음을 의미합니다. 연결을 통해 대역폭을 효과적으로 늘릴 수 있습니다. JEDEC는 DDR5RDIMM 메모리의 현재 6.4Gbps와 비교하여 궁극적으로 대역폭을 12.8Gbps로 늘리는 것을 목표로 여러 세대의 DDR5MRDIMM 메모리를 계획했습니다.

See all articles