Rumah pangkalan data tutorial mysql PostgreSQL 聚合函数共享申请的内存空间

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

Jun 07, 2016 pm 02:50 PM
c postgresql dikongsi Ingatan fungsi Mohon angkasa lepas pempolimeran

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

CREATE AGGREGATE Rbitmap_union2 (Rbitmap)
(
    sfunc = myfunction,
    stype = mytype,
    FINALFUNC = myfunction_final
);
Salin selepas log masuk

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


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



在使用 Version 1 Calling Conventions 时,有如下宏定义, PG_FUNCTION_ARGS 是我们编写函数的实际入参:
#define PG_FUNCTION_ARGS	FunctionCallInfo fcinfo
Salin selepas log masuk

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;
Salin selepas log masuk
其中的 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;
Salin selepas log masuk

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


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

MemoryContextAlloc(fcinfo->flinfo->fn_mcxt, sizeof(some_type));
Salin selepas log masuk
它会返回一个指向申请内存空间的 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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pengoptimuman memori yang besar, apakah yang perlu saya lakukan jika komputer menaik taraf kepada kelajuan memori 16g/32g dan tiada perubahan? Pengoptimuman memori yang besar, apakah yang perlu saya lakukan jika komputer menaik taraf kepada kelajuan memori 16g/32g dan tiada perubahan? Jun 18, 2024 pm 06:51 PM

Untuk pemacu keras mekanikal atau pemacu keadaan pepejal SATA, anda akan merasakan peningkatan kelajuan berjalan perisian Jika ia adalah pemacu keras NVME, anda mungkin tidak merasakannya. 1. Import pendaftaran ke dalam desktop dan buat dokumen teks baharu, salin dan tampal kandungan berikut, simpannya sebagai 1.reg, kemudian klik kanan untuk menggabungkan dan memulakan semula komputer. WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement]"DisablePagingExecutive"=d

Sumber mengatakan Samsung Electronics dan SK Hynix akan mengkomersialkan memori mudah alih bertindan selepas 2026 Sumber mengatakan Samsung Electronics dan SK Hynix akan mengkomersialkan memori mudah alih bertindan selepas 2026 Sep 03, 2024 pm 02:15 PM

Menurut berita dari laman web ini pada 3 September, media Korea etnews melaporkan semalam (waktu tempatan) bahawa produk memori mudah alih berstruktur "seperti HBM" SK Hynix akan dikomersialkan selepas 2026. Sumber berkata bahawa kedua-dua gergasi memori Korea menganggap memori mudah alih bertindan sebagai sumber penting hasil masa hadapan dan merancang untuk mengembangkan "memori seperti HBM" kepada telefon pintar, tablet dan komputer riba untuk membekalkan kuasa untuk AI bahagian hujung. Menurut laporan sebelumnya di laman web ini, produk Samsung Electronics dipanggil memori LPWide I/O, dan SK Hynix memanggil teknologi ini VFO. Kedua-dua syarikat telah menggunakan laluan teknikal yang hampir sama, iaitu menggabungkan pembungkusan kipas dan saluran menegak. Memori LPWide I/O Samsung Electronics mempunyai sedikit lebar 512

Lexar melancarkan kit memori Ares Wings of War DDR5 7600 16GB x2: Hynix A-die particles, 1,299 yuan Lexar melancarkan kit memori Ares Wings of War DDR5 7600 16GB x2: Hynix A-die particles, 1,299 yuan May 07, 2024 am 08:13 AM

Menurut berita dari laman web ini pada 6 Mei, Lexar melancarkan memori overclocking DDR57600CL36 siri Ares Wings of War Set 16GBx2 akan tersedia untuk pra-jualan pada 0:00 pada 7 Mei dengan deposit 50 yuan, dan harganya adalah. 1,299 yuan. Memori Lexar Wings of War menggunakan cip memori Hynix A-die, menyokong Intel XMP3.0 dan menyediakan dua pratetap overclocking berikut: 7600MT/s: CL36-46-46-961.4V8000MT/s: CL38-48-49 -1001.45V Dari segi pelesapan haba, set memori ini dilengkapi dengan jaket pelesapan haba aluminium setebal 1.8mm dan dilengkapi dengan pad gris silikon konduktif haba eksklusif PMIC. Memori menggunakan 8 manik LED kecerahan tinggi dan menyokong 13 mod pencahayaan RGB.

Kingbang melancarkan memori DDR5 8600 baharu, tersedia dalam CAMM2, LPCAMM2 dan model biasa Kingbang melancarkan memori DDR5 8600 baharu, tersedia dalam CAMM2, LPCAMM2 dan model biasa Jun 08, 2024 pm 01:35 PM

Menurut berita dari tapak ini pada 7 Jun, GEIL melancarkan penyelesaian DDR5 terbaharunya di Pameran Komputer Antarabangsa Taipei 2024, dan menyediakan versi SO-DIMM, CUDIMM, CSODIMM, CAMM2 dan LPCAMM2 untuk dipilih. ▲Sumber gambar: Wccftech Seperti yang ditunjukkan dalam gambar, memori CAMM2/LPCAMM2 yang dipamerkan oleh Jinbang menggunakan reka bentuk yang sangat padat, boleh memberikan kapasiti maksimum 128GB, dan kelajuan sehingga 8533MT/s malah sesetengah produk ini boleh stabil pada platform AMDAM5 Overclocked kepada 9000MT/s tanpa sebarang penyejukan tambahan. Menurut laporan, memori siri Polaris RGBDDR5 Jinbang 2024 boleh menyediakan sehingga 8400

Kesan gelombang AI adalah jelas TrendForce telah menyemak semula ramalannya untuk memori DRAM dan harga kontrak memori kilat NAND meningkat pada suku ini. Kesan gelombang AI adalah jelas TrendForce telah menyemak semula ramalannya untuk memori DRAM dan harga kontrak memori kilat NAND meningkat pada suku ini. May 07, 2024 pm 09:58 PM

Menurut laporan tinjauan TrendForce, gelombang AI mempunyai impak yang besar pada memori DRAM dan pasaran memori flash NAND. Dalam berita laman web ini pada 7 Mei, TrendForce berkata dalam laporan penyelidikan terbarunya hari ini bahawa agensi itu telah meningkatkan kenaikan harga kontrak untuk dua jenis produk storan pada suku ini. Secara khusus, TrendForce pada asalnya menganggarkan bahawa harga kontrak memori DRAM pada suku kedua 2024 akan meningkat sebanyak 3~8%, dan kini menganggarkannya pada 13~18% dari segi memori kilat NAND, anggaran asal akan meningkat sebanyak 13~ 18%, dan anggaran baharu ialah 15%. ~20%, hanya eMMC/UFS mempunyai peningkatan yang lebih rendah sebanyak 10%. ▲Sumber imej TrendForce TrendForce menyatakan bahawa agensi itu pada asalnya menjangkakan untuk meneruskan

Memori siri X100 baharu Vivo, pendedahan warna: semua siri bermula pada 12+256GB Memori siri X100 baharu Vivo, pendedahan warna: semua siri bermula pada 12+256GB May 06, 2024 pm 03:58 PM

Menurut berita pada 6 Mei, vivo secara rasmi mengumumkan hari ini bahawa siri vivoX100 baharu akan dikeluarkan secara rasmi pada jam 19:00 pada 13 Mei. Difahamkan persidangan ini dijangka mengeluarkan tiga model, vivoX100s, vivoX100sPro, dan vivoX100Ultra, serta teknologi pengimejan blueprint blueprint jenama vivo yang dibangunkan sendiri. Blogger digital "Digital Chat Station" turut mengeluarkan rendering rasmi, spesifikasi memori dan padanan warna bagi ketiga-tiga model ini hari ini Antaranya, X100s menggunakan reka bentuk skrin lurus, manakala X100sPro dan X100Ultra mempunyai reka bentuk skrin melengkung. Blogger mendedahkan bahawa vivoX100s datang dalam empat warna: hitam, titanium, cyan, dan spesifikasi memori

Koleksi lengkap formula fungsi excel Koleksi lengkap formula fungsi excel May 07, 2024 pm 12:04 PM

1. Fungsi SUM digunakan untuk menjumlahkan nombor dalam lajur atau sekumpulan sel, contohnya: =SUM(A1:J10). 2. Fungsi AVERAGE digunakan untuk mengira purata nombor dalam lajur atau sekumpulan sel, contohnya: =AVERAGE(A1:A10). 3. Fungsi COUNT, digunakan untuk mengira bilangan nombor atau teks dalam lajur atau sekumpulan sel, contohnya: =COUNT(A1:A10) 4. Fungsi IF, digunakan untuk membuat pertimbangan logik berdasarkan syarat yang ditentukan dan mengembalikan hasil yang sepadan.

Spesifikasi memori DDR5 MRDIMM dan LPDDR6 CAMM sedia untuk dilancarkan, JEDEC mengeluarkan butiran teknikal utama Spesifikasi memori DDR5 MRDIMM dan LPDDR6 CAMM sedia untuk dilancarkan, JEDEC mengeluarkan butiran teknikal utama Jul 23, 2024 pm 02:25 PM

Menurut berita dari laman web ini pada 23 Julai, Persatuan Teknologi Keadaan Pepejal JEDEC, penetap piawai mikroelektronik, mengumumkan pada waktu tempatan ke-22 bahawa spesifikasi teknikal memori DDR5MRDIMM dan LPDDR6CAMM akan dilancarkan secara rasmi tidak lama lagi, dan memperkenalkan butiran utama kedua-dua ini. kenangan. "MR" dalam DDR5MRDIMM bermaksud MultiplexedRank, yang bermaksud bahawa memori menyokong dua atau lebih Kedudukan dan boleh menggabungkan dan menghantar berbilang isyarat data pada satu saluran tanpa fizikal tambahan Sambungan boleh meningkatkan lebar jalur dengan berkesan. JEDEC telah merancang beberapa generasi memori DDR5MRDIMM, dengan matlamat akhirnya meningkatkan lebar jalurnya kepada 12.8Gbps, berbanding dengan 6.4Gbps memori DDR5RDIMM semasa.

See all articles