SlideShare a Scribd company logo
Performance improvements in
PostgreSQL 9.5 and 9.6
5432meet.us 2016, June 29, Milan
Tomas Vondra
tomas.vondra@2ndquadrant.com
http://www.slideshare.net/fuzzycz/postgresql-
performance-improvements-in-95-and-96
PostgreSQL 9.5, 9.6, ...
● many improvements
– many of them related to performance
– many quite large
● release notes are good overview, but ...
– many changes not mentioned explicitly
– often difficult to get an idea of the impact
● many talks about new features in general
– this talk is about changes affecting performance
What we'll look at?
● PostgreSQL 9.5 & 9.6
● only “main” improvements
– complete “features” (multiple commits)
– try to showcase the impact
– no particular order
● dozens of additional optimizations
– see release notes for the full list
PostgreSQL 9.5
Sorting
● allow sorting by in-lined, non-SQL-callable functions
– reduces per-call overhead
● use abbreviated keys for faster sorting (strxfrm)
– VARCHAR, TEXT, NUMERIC
– does not apply to CHAR values!
● places using “Sort Support” benefits from this
– CREATE INDEX, REINDEX, CLUSTER
– ORDER BY (when not evaluated using an index)
Sorting
-- randomly sorted table
CREATE TABLE test_text_random AS
SELECT md5(i::text) AS val
FROM generate_series(1, 50.000.000) s(i);
-- correctly sorted table
CREATE TABLE test_text_asc AS
SELECT * from test_text_random ORDER BY 1;
-- test query
SELECT COUNT(1) FROM (
SELECT * FROM test_text_random ORDER BY 1
) foo;
asc desc almost asc almost desc random
0
50
100
150
200
250
300
350
400
450
500
Sorting improvements in PostgreSQL 9.5
sort duration on 50M rows (TEXT)
PostgreSQL 9.4 PostgreSQL 9.5
dataset type
duration[seconds]
asc desc almost asc almost desc random
0
50
100
150
200
250
300
350
Sorting improvements in PostgreSQL 9.5
sort duration on 50M rows (NUMERIC)
PostgreSQL 9.4 PostgreSQL 9.5
dataset type
duration[seconds]
Hash Joins
● reduce palloc overhead
– dense packing of tuples (trivial local allocator, same life-span)
– significant reduction of overhead (both space and time)
● reduce NTUP_PER_BUCKET to 1 (from 10)
– goal is less that 1 tuple per bucket (on average)
– significant speedup of lookups
● dynamically resize the hash table
– handle under-estimates gracefully
– otherwise easily 100s of tuples per bucket (linked list)
Hash Joins
0 1 2 3 4 5 6 7 8 9 10 1110 11
Hash Joins
0 1 2 3 4 5 6 7 8 9 10 1110 11
Hash Joins
-- dimension table (small one, will be hashed)
CREATE TABLE test_dim AS
SELECT (i-1) AS id, md5(i::text) AS val
FROM generate_series(1, 100.000) s(i);
-- fact table (large one)
CREATE TABLE test_fact AS
SELECT mod(i, 100.000) AS dim_id, md5(i::text) AS val
FROM generate_series(1, 50.000.000) s(i);
-- example query (join of the two tables)
SELECT count(*) FROM test_fact
JOIN test_dim ON (dim_id = id);
0
200000
400000
600000
800000
1000000
1200000
1400000
1600000
1800000
2000000
0
10000
20000
30000
40000
50000
PostgreSQL 9.5 Hash Join Improvements
join duration - 50M rows (outer), different NTUP_PER_BUCKET
NTUP_PER_BUCKET=10 NTUP_PER_BUCKET=1
hash size (number of tuples in dimension)
duration[miliseconds]
BRIN Indexes
min=33, max=75
min=1223, max=2392
min=3456, max=7800
min=95, max=985
min=11, max=212
min=1, max=45
min=139, max=450
WHERE c = 1999
WHERE c BETWEEN 100 AND 200
BRIN Indexes
­­ table with 100M rows
CREATE TABLE test_bitmap AS
  SELECT mod(i, 100.000) AS val
    FROM generate_series(1, 100.000.000) s(i);
CREATE INDEX test_btree_idx ON test_bitmap(val);
CREATE INDEX test_brin_idx ON test_bitmap USING brin(val);
­­ benchmark (enforce bitmap index scan)
SET enable_seqscan = off;
SET enable_indexscan = off;
SELECT COUNT(*) FROM test_bitmap WHERE val <= $1;
0.00% 20.00% 40.00% 60.00% 80.00% 100.00%
0
5000
10000
15000
20000
BRIN vs. BTREE
Bitmap Index Scan on 100M rows (sorted)
BTREE BRIN (128) BRIN (4)
fraction of table matching the condition
duration[miliseconds]
btree BRIN (1) BRIN (4) BRIN (128)
0
500
1000
1500
2000
2500
2142
11 2.8 0.13
BRIN vs. BTREE
index size on 100M rows
size(MB)
Other Index Improvements
● CREATE INDEX
– avoid copying index tuples when building an index (palloc
overhead)
● Index-only scans with GiST
– support to range type, inet GiST opclass and btree_gist
● Bitmap Index Scan
– in some cases up to 50% spent in tbm_add_tuples
– cache the last accessed page in tbm_add_tuples
 
Other Improvements
● locking and shared_buffers scalability
– reduce overhead, make it more concurrent
– large (multi-socket) systems
– reduce lock strength for some DDL commands
● CRC optimizations (--data-checksums)
– use SSE when available, various optimizations
– significantly improved throughput (GB/s)
● planner optimizations
– make the planning / execution smarter
● PL/pgSQL improvements
0 10 20 30 40 50 60 70
0
100000
200000
300000
400000
500000
600000
read-only scalability improvements in 9.5
pgbench -S -M prepared -j $N -c $N
PostgreSQL 9.4 PostgreSQL 9.5
number of clients
transactionspersecond
PostgreSQL 9.6
Parallel Query
● until now, each query limited to 1 core
● 9.6 parallelizes some operations
– sequential scan, aggregation, joins (NL + hash)
– limited to read-only queries
– setup overhead, efficient on large tables
● in the future
– utility commands (CREATE INDEX, VACUUM, …)
– additional operations (Sort, …)
– improving supported ones (sharing hashtable in hashjoins)
Parallel Query
­­ table with 1 billion rows (~80GB on disk)
CREATE TABLE f AS
       SELECT MOD(i,100000) AS id, MD5(i::text) AS h, random() AS amount
         FROM generate_series(1,1000000000) s(i);
EXPLAIN SELECT SUM(amount) FROM f JOIN d USING (id);
                              QUERY PLAN
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
 Aggregate  (cost=35598980.00..35598980.01 rows=1 width=8)
   ­>  Hash Join  (cost=3185.00..33098980.00 rows=1000000000 width=8)
         Hash Cond: (f.id = d.id)
         ­>  Seq Scan on f  (cost=0.00..19345795.00 rows=1000000000 ...)
         ­>  Hash  (cost=1935.00..1935.00 rows=100000 width=4)
               ­>  Seq Scan on d  (cost=0.00..1935.00 rows=100000 ...)
(6 rows)
Parallel Query
SET max_parallel_workers_per_gather = 32;
EXPLAIN SELECT SUM(amount) FROM f JOIN d USING (id);
                                    QUERY PLAN
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
 Finalize Aggregate  (cost=14488869.82..14488869.83 rows=1 width=8)
   ­>  Gather  (cost=14488868.89..14488869.80 rows=9 width=8)
         Workers Planned: 9
         ­>  Partial Aggregate  (cost=14487868.89..14487868.90 rows=1 width=8)
               ­>  Hash Join  (cost=3185.00..11987868.89 rows=1000000000 width=8)
                     Hash Cond: (f.id = d.id)
                     ­>  Parallel Seq Scan on f  (cost=0.00..10456906.11 ...)
                     ­>  Hash  (cost=1935.00..1935.00 rows=100000 width=4)
                           ­>  Seq Scan on d  (cost=0.00..1935.00 rows=100000 ...)
(9 rows)
top
  PID   VIRT  RES  SHR S %CPU %MEM  COMMAND                                          
19018  32.8g 441m 427m R  100  0.2  postgres: sekondquad test [local] SELECT         
20134  32.8g  80m  74m R  100  0.0  postgres: bgworker: parallel worker for PID 19018
20135  32.8g  80m  74m R  100  0.0  postgres: bgworker: parallel worker for PID 19018
20136  32.8g  80m  74m R  100  0.0  postgres: bgworker: parallel worker for PID 19018
20140  32.8g  80m  74m R  100  0.0  postgres: bgworker: parallel worker for PID 19018
20141  32.8g  80m  74m R  100  0.0  postgres: bgworker: parallel worker for PID 19018
20142  32.8g  80m  74m R  100  0.0  postgres: bgworker: parallel worker for PID 19018
20137  32.8g  80m  74m R   99  0.0  postgres: bgworker: parallel worker for PID 19018
20138  32.8g  80m  74m R   99  0.0  postgres: bgworker: parallel worker for PID 19018
20139  32.8g  80m  74m R   99  0.0  postgres: bgworker: parallel worker for PID 19018
   16      0    0    0 S    0  0.0  [watchdog/2]                                     
  281      0    0    0 S    0  0.0  [khugepaged]  
....
0 workers 9 workers
0
50
100
150
200
250
300
350
400
360
40
speedup with parallel query
example query without and with parallelism
duration[seconds]
https://www.youtube.com/watch?v=ysHZ1PDnH-s
Parallel Query Has Arrived!
Aggregate functions
● some aggregates use the same state
– AVG, SUM, …
– we’re keeping it separate and updating it twice
– but only the final function is actually different
● so …
Share transition state between different
aggregates when possible.
Aggregate functions
­­ table with 50M rows
CREATE TABLE test_aggregates AS 
SELECT i AS a
  FROM generate_series(1, 50.000.000) s(i);
­­ compute both SUM and AVG on a column
SELECT SUM(a), AVG(a) FROM test_aggregates;
BIGINT NUMERIC
0
2000
4000
6000
8000
10000
12000
14000
5438
12858
4056
8103
Aggregate functions
sharing aggregate state
before after
duration[miliseconds]
Checkpoints
● we need to write dirty buffers to disk regularly
– data written to page cache (no O_DIRECT)
– kernel responsible for actual write out
● until now, we simply walked shared buffers
– random order of buffers, causing random I/O
– 9.6 sorts the buffers first, to get sequential order
● until now, we only only did fsync at the end
– a lot of dirty data in page cache, latency spikes
– 9.6 allows continuous flushing (disabled by default)
Improving Postgres' Buffer Manager
Andres Freund
PostgreSQL Developer & Committer
Citus Data – citusdata.com - @citusdata
http://anarazel.de/talks/fosdem-2016-01-31/io.pdf
0
200
400
600
800
1000
1200
1400
1600
1800
2000
0
200
400
600
800
1000
1200
1400
1600
1800
2000
pgbench -M prepared -c 32 -j 32
shared_buffers = 16GB, max_wal_size = 100GB
TPS
Latency
seconds
TPS
Latency(ms)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
0
200
400
600
800
1000
1200
pgbench -M prepared -c 32 -j 32
shared_buffers = 16GB, max_wal_size = 100GB, target = 0.9; OS tuning (no dirty)
TPS
Latency
seconds
TPS
Latency(ms)
Sort (again)
● abbreviated keys extended to
– additional data types: uuid, bytea, char(n)
– ordered set aggregates
● use quicksort (instead of replacement selection)
for “external sort” case
● … and many other optimizations
8MB 32MB 128MB 512MB 1GB
0
1000
2000
3000
4000
5000
6000
Sort performance in 9.5 / 9.6
PostgreSQL 9.5 PostgreSQL 9.6
work_mem
duration(seconds)
Freezing
● XIDs are 64-bit, but we only store the low 32 bits
– need to do “freeze” every ~2 billion transactions
– that means reading all the data (even unmodified parts)
– problem on large databases (time consuming)
– users often postpone until it’s too late (outage)
● PostgreSQL 9.6 introduces “freeze map”
– similar to “visibility map” (and stored in the same file)
– “all rows on page are frozen” - we can skip this 8kB page
Future
● extending parallel query (additional operations)
● declarative partitioning (smart joins, …)
● columnar features
– vectorized execution, compression, …
– do more with the same amount of resources
● improving planner
– correlation statistics, optimizations (unijoins)
Questions?

More Related Content

PDF
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
PPTX
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
PDF
AWS Blackbelt 2015シリーズ Amazon Storage Service (S3)
DOC
Anil_Testing_Trainer
PDF
Aurora는 어떻게 다른가 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
PPTX
AWS CloudFront 가속 및 DDoS 방어
PDF
AWS初心者向けWebinar AWS上にWebサーバーシステムを作ってみましょう ~まずは仮想サーバーから[演習つき]~
PDF
AWS Black Belt Tech シリーズ 2016 - Amazon SQS / Amazon SNS
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS Blackbelt 2015シリーズ Amazon Storage Service (S3)
Anil_Testing_Trainer
Aurora는 어떻게 다른가 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
AWS CloudFront 가속 및 DDoS 방어
AWS初心者向けWebinar AWS上にWebサーバーシステムを作ってみましょう ~まずは仮想サーバーから[演習つき]~
AWS Black Belt Tech シリーズ 2016 - Amazon SQS / Amazon SNS

What's hot (20)

PDF
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
PDF
효율적인 빅데이터 분석 및 처리를 위한 Glue, EMR 활용 - 김태현 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
PDF
Introduction To Amazon Web Services | AWS Tutorial for Beginners | AWS Traini...
PDF
Amazon VPC와 ELB/Direct Connect/VPN 알아보기 - 김세준, AWS 솔루션즈 아키텍트
PPTX
Azure Functions Real World Examples
PDF
AWS Greengrass V2와 신규 IoT 서비스를 활용한 개방형 edge 소프트웨어 환경 구축 - 이세현 AWS IoT 스페셜리스트 ...
PPTX
OOW15 - Testing Oracle E-Business Suite Best Practices
PDF
AWS Cloud Adoption Framework and Workshops
PDF
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기::이창수::AWS Summit Seoul 2018
PPTX
9월 웨비나 - AWS에서의 네트워크 보안 (이경수 솔루션즈 아키텍트)
PDF
Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
PPTX
AWS 의 비용 절감 프레임워크와 신규 프로그램을 활용한 전략적 비용절감 :: AWS Travel and Transportation 온라인...
PPTX
AzureSynapse.pptx
PPTX
Cloud foundry: The Platform for Forging Cloud Native Applications
PDF
AWS Black Belt Online Seminar 2017 Amazon Relational Database Service (Amazon...
PDF
Introducing log analysis to your organization
PDF
Apache Flink 101 - the rise of stream processing and beyond
PDF
웹 3.0 시대에서의 블록체인, 메타버스 및 대체불가 토큰(NFT) on AWS 사례 공유 [레벨 200] - 발표자: 이이구, CTO, ...
PPTX
Nmap 9 truth "Nothing to say any more"
AWS를 통한 빅데이터 기반 비지니스 인텔리전스 구축- AWS Summit Seoul 2017
효율적인 빅데이터 분석 및 처리를 위한 Glue, EMR 활용 - 김태현 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
Introduction To Amazon Web Services | AWS Tutorial for Beginners | AWS Traini...
Amazon VPC와 ELB/Direct Connect/VPN 알아보기 - 김세준, AWS 솔루션즈 아키텍트
Azure Functions Real World Examples
AWS Greengrass V2와 신규 IoT 서비스를 활용한 개방형 edge 소프트웨어 환경 구축 - 이세현 AWS IoT 스페셜리스트 ...
OOW15 - Testing Oracle E-Business Suite Best Practices
AWS Cloud Adoption Framework and Workshops
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기::이창수::AWS Summit Seoul 2018
9월 웨비나 - AWS에서의 네트워크 보안 (이경수 솔루션즈 아키텍트)
Gaming on AWS - 1. AWS로 글로벌 게임 런칭하기 - 장르별 아키텍처 중심
AWS 의 비용 절감 프레임워크와 신규 프로그램을 활용한 전략적 비용절감 :: AWS Travel and Transportation 온라인...
AzureSynapse.pptx
Cloud foundry: The Platform for Forging Cloud Native Applications
AWS Black Belt Online Seminar 2017 Amazon Relational Database Service (Amazon...
Introducing log analysis to your organization
Apache Flink 101 - the rise of stream processing and beyond
웹 3.0 시대에서의 블록체인, 메타버스 및 대체불가 토큰(NFT) on AWS 사례 공유 [레벨 200] - 발표자: 이이구, CTO, ...
Nmap 9 truth "Nothing to say any more"
Ad

Viewers also liked (20)

PDF
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PDF
Performance improvements in PostgreSQL 9.5 and beyond
PDF
PostgreSQL 9.6 Performance-Scalability Improvements
PDF
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PDF
5 Steps to PostgreSQL Performance
PDF
Linux tuning to improve PostgreSQL performance
PDF
What's New in PostgreSQL 9.6
 
PDF
PostgreSQL and Benchmarks
PDF
Postgres in Production - Best Practices 2014
 
PDF
Deep dive into PostgreSQL statistics.
PDF
Novinky v PostgreSQL 9.4 a JSONB
PPTX
The Magic of Tuning in PostgreSQL
PDF
Best Practices for Becoming an Exceptional Postgres DBA
 
PDF
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PDF
Expanding with EDB Postgres Advanced Server 9.5
 
PDF
Logical Replication in PostgreSQL - FLOSSUK 2016
PDF
5 Postgres DBA Tips
 
PDF
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
ODP
PostgreSQL Administration for System Administrators
PDF
Postgresql database administration volume 1
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
Performance improvements in PostgreSQL 9.5 and beyond
PostgreSQL 9.6 Performance-Scalability Improvements
PostgreSQL on EXT4, XFS, BTRFS and ZFS
5 Steps to PostgreSQL Performance
Linux tuning to improve PostgreSQL performance
What's New in PostgreSQL 9.6
 
PostgreSQL and Benchmarks
Postgres in Production - Best Practices 2014
 
Deep dive into PostgreSQL statistics.
Novinky v PostgreSQL 9.4 a JSONB
The Magic of Tuning in PostgreSQL
Best Practices for Becoming an Exceptional Postgres DBA
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
Expanding with EDB Postgres Advanced Server 9.5
 
Logical Replication in PostgreSQL - FLOSSUK 2016
5 Postgres DBA Tips
 
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
PostgreSQL Administration for System Administrators
Postgresql database administration volume 1
Ad

Similar to PostgreSQL performance improvements in 9.5 and 9.6 (20)

PDF
Ten Reasons Why You Should Prefer PostgreSQL to MySQL
PDF
Changing your huge table's data types in production
PPT
mySQL and Relational Databases
PPTX
Sql analytic queries tips
ODP
Scaling PostgreSQL With GridSQL
PDF
10 Reasons to Start Your Analytics Project with PostgreSQL
ODP
PostgreSQL 8.4 TriLUG 2009-11-12
ODP
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
ODP
Типы данных JSONb, соответствующие индексы и модуль jsquery – Олег Бартунов, ...
PPTX
Lazy beats Smart and Fast
PDF
Aileen heal postgis osmm cou
PPTX
Queuing Sql Server: Utilise queues to increase performance in SQL Server
ODP
MySQL 5.7 - What's new and How to upgrade
PDF
MySQL 5.7 - What's new, How to upgrade and Document Store
PPTX
Modern sql
PDF
Don’t optimize my queries, optimize my data!
PDF
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
PPT
MySql slides (ppt)
PPT
Myth busters - performance tuning 101 2007
PPT
mysqlHiep.ppt
Ten Reasons Why You Should Prefer PostgreSQL to MySQL
Changing your huge table's data types in production
mySQL and Relational Databases
Sql analytic queries tips
Scaling PostgreSQL With GridSQL
10 Reasons to Start Your Analytics Project with PostgreSQL
PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL Moscow Meetup - September 2014 - Oleg Bartunov and Alexander Korotkov
Типы данных JSONb, соответствующие индексы и модуль jsquery – Олег Бартунов, ...
Lazy beats Smart and Fast
Aileen heal postgis osmm cou
Queuing Sql Server: Utilise queues to increase performance in SQL Server
MySQL 5.7 - What's new and How to upgrade
MySQL 5.7 - What's new, How to upgrade and Document Store
Modern sql
Don’t optimize my queries, optimize my data!
Postgres & Redis Sitting in a Tree- Rimas Silkaitis, Heroku
MySql slides (ppt)
Myth busters - performance tuning 101 2007
mysqlHiep.ppt

More from Tomas Vondra (14)

PDF
CREATE STATISTICS - What is it for? (PostgresLondon)
PDF
Data corruption
PDF
CREATE STATISTICS - what is it for?
PDF
DB vs. encryption
ODP
PostgreSQL na EXT4, XFS, BTRFS a ZFS / OpenAlt
PDF
Postgresql na EXT3/4, XFS, BTRFS a ZFS
PDF
PostgreSQL performance archaeology
PDF
Výkonnostní archeologie
PDF
Český fulltext a sdílené slovníky
PDF
SSD vs HDD / WAL, indexes and fsync
PDF
Checkpoint (CSPUG 22.11.2011)
PDF
Čtení explain planu (CSPUG 21.6.2011)
PDF
Replikace (CSPUG 19.4.2011)
PDF
PostgreSQL / Performance monitoring
CREATE STATISTICS - What is it for? (PostgresLondon)
Data corruption
CREATE STATISTICS - what is it for?
DB vs. encryption
PostgreSQL na EXT4, XFS, BTRFS a ZFS / OpenAlt
Postgresql na EXT3/4, XFS, BTRFS a ZFS
PostgreSQL performance archaeology
Výkonnostní archeologie
Český fulltext a sdílené slovníky
SSD vs HDD / WAL, indexes and fsync
Checkpoint (CSPUG 22.11.2011)
Čtení explain planu (CSPUG 21.6.2011)
Replikace (CSPUG 19.4.2011)
PostgreSQL / Performance monitoring

Recently uploaded (20)

PDF
Modernizing your data center with Dell and AMD
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPT
Teaching material agriculture food technology
PPTX
MYSQL Presentation for SQL database connectivity
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
cuic standard and advanced reporting.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Encapsulation theory and applications.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Approach and Philosophy of On baking technology
PDF
Spectral efficient network and resource selection model in 5G networks
Modernizing your data center with Dell and AMD
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Understanding_Digital_Forensics_Presentation.pptx
Teaching material agriculture food technology
MYSQL Presentation for SQL database connectivity
NewMind AI Weekly Chronicles - August'25 Week I
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Encapsulation_ Review paper, used for researhc scholars
The AUB Centre for AI in Media Proposal.docx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
cuic standard and advanced reporting.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Encapsulation theory and applications.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Mobile App Security Testing_ A Comprehensive Guide.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Approach and Philosophy of On baking technology
Spectral efficient network and resource selection model in 5G networks

PostgreSQL performance improvements in 9.5 and 9.6