Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc1a6f4f

Browse files
committed
Add cfs_compression_ratio function
1 parent0e86701 commitc1a6f4f

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

‎src/backend/storage/file/cfs.c

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -831,6 +831,7 @@ PG_FUNCTION_INFO_V1(cfs_start_gc);
831831
PG_FUNCTION_INFO_V1(cfs_enable_gc);
832832
PG_FUNCTION_INFO_V1(cfs_version);
833833
PG_FUNCTION_INFO_V1(cfs_estimate);
834+
PG_FUNCTION_INFO_V1(cfs_compression_ratio);
834835

835836
Datumcfs_start_gc(PG_FUNCTION_ARGS)
836837
{
@@ -923,3 +924,53 @@ Datum cfs_estimate(PG_FUNCTION_ARGS)
923924
}
924925
PG_RETURN_FLOAT8(avgRatio);
925926
}
927+
928+
Datumcfs_compression_ratio(PG_FUNCTION_ARGS)
929+
{
930+
Oidoid=PG_GETARG_OID(0);
931+
Relationrel=try_relation_open(oid,AccessShareLock);
932+
uint64virtSize=0;
933+
uint64physSize=0;
934+
935+
if (rel!=NULL) {
936+
char*path=relpathbackend(rel->rd_node,rel->rd_backend,MAIN_FORKNUM);
937+
char*map_path= (char*)palloc(strlen(path)+16);
938+
inti=0;
939+
940+
while (true) {
941+
intmd;
942+
FileMap*map;
943+
944+
if (i==0) {
945+
sprintf(map_path,"%s.cfm",path);
946+
}else {
947+
sprintf(map_path,"%s.%u.cfm",path,i);
948+
}
949+
md=open(map_path,O_RDONLY|PG_BINARY,0);
950+
if (md<0) {
951+
break;
952+
}
953+
map=cfs_mmap(md);
954+
if (map==MAP_FAILED) {
955+
elog(LOG,"cfs_compression_ration failed to map file %s: %m",map_path);
956+
close(md);
957+
break;
958+
}
959+
virtSize+=pg_atomic_read_u32(&map->virtSize);
960+
physSize+=pg_atomic_read_u32(&map->physSize);
961+
962+
if (cfs_munmap(map)<0) {
963+
elog(LOG,"Failed to unmap file %s: %m",map_path);
964+
}
965+
if (close(md)<0) {
966+
elog(LOG,"Failed to close file %s: %m",map_path);
967+
}
968+
i+=1;
969+
}
970+
pfree(path);
971+
pfree(map_path);
972+
relation_close(rel,AccessShareLock);
973+
}
974+
PG_RETURN_FLOAT8((double)virtSize/physSize);
975+
}
976+

‎src/backend/storage/file/reinit.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ parse_filename_for_nontemp_relation(const char *name, int *oidchars,
431431
intsegchar;
432432

433433
/* .cfm is used by compression */
434-
if (strcmp(name+pos+1,"cfm")==0) {
434+
if (strcmp(name+pos,".cfm")==0) {
435435
return true;
436436
}
437437
for (segchar=1;isdigit((unsignedchar)name[pos+segchar]);++segchar)
@@ -441,6 +441,11 @@ parse_filename_for_nontemp_relation(const char *name, int *oidchars,
441441
pos+=segchar;
442442
}
443443

444+
/* .cfm is used by compression */
445+
if (strcmp(name+pos,".cfm")==0) {
446+
return true;
447+
}
448+
444449
/* Now we should be at the end. */
445450
if (name[pos]!='\0')
446451
return false;

‎src/include/catalog/pg_proc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5348,6 +5348,8 @@ DATA(insert OID = 6102 ( cfs_enable_gc PGNSP PGUID 12 1 0 0 0 f f f f t f v
53485348
DESCR("Enable or disable CFS garbage collection");
53495349
DATA(insert OID = 6103 ( cfs_estimate PGNSP PGUID 12 1 0 0 0 f f f f t f v s 1 0 701 "2205" _null_ _null_ _null_ _null_ _null_ cfs_estimate _null_ _null_ _null_ ));
53505350
DESCR("Estimate relation compression ratio");
5351+
DATA(insert OID = 6019 ( cfs_compression_ratio PGNSP PGUID 12 1 0 0 0 f f f f t f v s 1 0 701 "2205" _null_ _null_ _null_ _null_ _null_ cfs_compression_ratio _null_ _null_ _null_ ));
5352+
DESCR("Compression ration of relation");
53515353

53525354
/* distance functions */
53535355
DATA(insert OID = 3343 ( int2_distPGNSP PGUID 12 1 0 0 0 f f f f t f i s 2 0 21 "21 21"_null_ _null_ _null_ _null_ _null_int2_dist_null_ _null_ _null_ ));

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp