SlideShare a Scribd company logo
1 of 72
Download to read offline
© 2016 by Markus Winand
Transactions
What they are good for and how they work
( )
Transactions are Brackets
Starting a transaction:
Explicit:
START	TRANSACTION		
Implicit:
INSERT / UPDATE /
DELETE

SELECT	
CREATE
Terminating a transaction:
Explicit:
COMMIT	
ROLLBACK	
Implementation defined:
Due to errors
CREATE
…	
Varies

amongst

products
Transactions have Characteristics
Access-Mode:
READ_ONLY	
READ_WRITE	
Constraint Mode:
IMMEDIATE	
DEFERRED
Transaction-Isolation-Level:
READ	UNCOMMITTED	
READ	COMMITTED	
REPEATABLE	READ	
SERIALIZABLE	
Diagnostic Size:
Archaic
Transactions have Characteristics
Access-Mode:
READ_ONLY	
READ_WRITE	
Constraint Mode:
IMMEDIATE	
DEFERRED
Transaction-Isolation-Level:
READ	UNCOMMITTED	
READ	COMMITTED	
REPEATABLE	READ	
SERIALIZABLE	
Diagnostic Size:
Archaic
Not strictly a

transaction


characteristic
Setting Transaction Characteristics
With explicit transaction begin:
START	TRANSACTION		ISOLATION	LEVEL	SERIALIZABLE		READ	WRITE	
For next (implicitly started) transaction:
SET			TRANSACTION		ISOLATION	LEVEL	SERIALIZABLE		READ	WRITE	
The standard uses SERIALIZEABLE as default,

but most implementations default to READ	COMMITTED.
In practice: Use an API if possible.
Use Cases for Transactions
Use Cases for Transactions
When writing
Use Cases for Transactions
Backing out incomplete changes…
… by the program with rollback
… by the RDBMS in case of crash
When writing
Use Cases for Transactions
Backing out incomplete changes…
… by the program with rollback
… by the RDBMS in case of crash
When writing
(Boring)
Use Cases for Transactions
Backing out incomplete changes…
… by the program with rollback
… by the RDBMS in case of crash
When writing When reading
(Boring)
Use Cases for Transactions
Backing out incomplete changes…
… by the program with rollback
… by the RDBMS in case of crash
When writing When reading
Simplify concurrent programs…
… by utilising the right

transaction isolation level
(Boring)
Use Cases for Transactions
Backing out incomplete changes…
… by the program with rollback
… by the RDBMS in case of crash
When writing When reading
Simplify concurrent programs…
… by utilising the right

transaction isolation level
(Boring) Amazing!
Standard Transaction Isolation Levels
Phenomena covered by the Standard
Dirty Read
Non-Repeatable
Read
Phantom Read
READ	UNCOMMITTED
READ	COMMITTED
REPEATABLE	READ
SERIALIZABLE
STOP
STOP STOP
STOPSTOPSTOP
Standard Transaction Isolation Levels
Phenomena covered by the Standard
Dirty Read
Non-Repeatable
Read
Phantom Read
READ	UNCOMMITTED
READ	COMMITTED
REPEATABLE	READ
SERIALIZABLE
STOP
STOP STOP
STOPSTOPSTOP
Incomplete,

unfortunately
How Comes?
SQL is a declarative language:

the standard doesn’t say how to implement it,

it just describes the effects it has.
Unfortunately, SQL-92 was written with locking in mind,

and thus only describes the effects in the granularity

in which they appear whey implemented using locking.
Although a commonly known issue, it was never changed.
https://en.wikipedia.org/wiki/Snapshot_isolation
Transaction Isolation Using Locks
Phenomena covered by the Standard
Dirty Read
Non-Repeatable
Read
Phantom Read
READ	UNCOMMITTED
READ	COMMITTED
REPEATABLE	READ
SERIALIZABLE
▶ Row (short) ▶ Row (TX) ▶ Row (TX)

▶ Predicate (TX)
STOP
STOP STOP
STOPSTOPSTOP
Transaction Isolation Using Locks
Phenomena covered by the Standard
Dirty Read
Non-Repeatable
Read
Phantom Read
READ	UNCOMMITTED
READ	COMMITTED
REPEATABLE	READ
SERIALIZABLE
▶ Row (short) ▶ Row (TX) ▶ Row (TX)

▶ Predicate (TX)
STOP
STOP STOP
STOPSTOPSTOP
Locks preventing

phenomena:

What (how long)
Transaction Isolation Using Locks
Phenomena covered by the Standard
Dirty Read
Non-Repeatable
Read
Phantom Read
READ	UNCOMMITTED
READ	COMMITTED
REPEATABLE	READ
SERIALIZABLE
▶ Row (short) ▶ Row (TX) ▶ Row (TX)

▶ Predicate (TX)
STOP
STOP STOP
STOPSTOPSTOP
Locks preventing

phenomena:

What (how long)
Transaction Isolation Using Locks
Phenomena covered by the Standard
Dirty Read
Non-Repeatable
Read
Phantom Read
READ	UNCOMMITTED
READ	COMMITTED
REPEATABLE	READ
SERIALIZABLE
▶ Row (short) ▶ Row (TX) ▶ Row (TX)

▶ Predicate (TX)
STOP
STOP STOP
STOPSTOPSTOP
Locks preventing

phenomena:

What (how long)
Transaction Isolation Using Locks
Phenomena covered by the Standard
Dirty Read
Non-Repeatable
Read
Phantom Read
READ	UNCOMMITTED
READ	COMMITTED
REPEATABLE	READ
SERIALIZABLE
▶ Row (short) ▶ Row (TX) ▶ Row (TX)

▶ Predicate (TX)
STOP
STOP STOP
STOPSTOPSTOP
Locks preventing

phenomena:

What (how long)
Example: Write Skew
Make sure the sum of two rows is positive

(e.g., two bank accounts belonging to the same person)
Code to withdraw from one account

(naive schema and not considering concurrency)

UPDATE	accounts

			SET	balance	=	balance	-	200

	WHERE	account	=	1	
SELECT	SUM(balance)

		FROM	accounts

	WHERE	account	IN	(1,2)
>= 0 commit					

<0 rollback
Examples: Disclaimer
The following examples just demonstrate

one possible way two transactions could interact.
The examples are by no means exhaustive.
Write Skew in Lock-based READ UNCOMMITTED
Account Balance
1 100
2 100
Transaction 1 Transaction 2
Write Skew in Lock-based READ UNCOMMITTED
Account Balance
1 100
2 100
Transaction 1 Transaction 2
▶ 1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
Write Skew in Lock-based READ UNCOMMITTED
Account Balance
1 100
2 100
Transaction 1 Transaction 2
▶ 1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
▶ 1 -100
2 -100 ◀
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
Write Skew in Lock-based READ UNCOMMITTED
Account Balance
1 100
2 100
Transaction 1 Transaction 2
▶ 1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
▶ 1 -100
2 -100 ◀
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
▶ 1 -100
2 -100 ◀
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
Write Skew in Lock-based READ UNCOMMITTED
Account Balance
1 100
2 100
Transaction 1 Transaction 2
▶ 1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
▶ 1 -100
2 -100 ◀
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
▶ 1 -100
2 -100 ◀
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
-200
Write Skew in Lock-based READ UNCOMMITTED
Account Balance
1 100
2 100
Transaction 1 Transaction 2
▶ 1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
▶ 1 -100
2 -100 ◀
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
▶ 1 -100
2 -100 ◀
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
▶ 1 -100
2 -100 ◀
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
-200
Write Skew in Lock-based READ UNCOMMITTED
Account Balance
1 100
2 100
Transaction 1 Transaction 2
▶ 1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
▶ 1 -100
2 -100 ◀
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
▶ 1 -100
2 -100 ◀
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
▶ 1 -100
2 -100 ◀
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
-200
-200
Write Skew in Lock-based READ COMMITTED
Write Skew in Lock-based READ COMMITTED
Account Balance
1 100
2 100
Transaction 1 Transaction 2
Write Skew in Lock-based READ COMMITTED
Account Balance
1 100
2 100
Transaction 1 Transaction 2
▶ 1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
Write Skew in Lock-based READ COMMITTED
Account Balance
1 100
2 100
Transaction 1 Transaction 2
▶ 1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
▶ 1 -100
2 -100 ◀
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
Write Skew in Lock-based READ COMMITTED
Account Balance
1 100
2 100
Transaction 1 Transaction 2
▶ 1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
▶ 1 -100
2 -100 ◀
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
▶ 1 -100
2 -100 ◀
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
Blocked
▶
Write Skew in Lock-based READ COMMITTED
Account Balance
1 100
2 100
Transaction 1 Transaction 2
▶ 1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
▶ 1 -100
2 -100 ◀
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
▶ 1 -100
2 -100 ◀
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
Blocked
Dead lock
▶
◀▶ 1 -100
2 -100 ◀
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)▶
First Write, then Read: Conclusion
For this code, READ	COMMITTED is enough

to make one of the transactions succeed

(assuming a proper deadlock detection).
First Write, then Read: Conclusion
For this code, READ	COMMITTED is enough

to make one of the transactions succeed

(assuming a proper deadlock detection).
Exercise: Does this hold true in these cases too?
First Write, then Read: Conclusion
For this code, READ	COMMITTED is enough

to make one of the transactions succeed

(assuming a proper deadlock detection).
Exercise: Does this hold true in these cases too?
SELECT	sum(balance)

		FROM	accounts

	WHERE	account	IN	(1,2)	
(iff >= 200)
UPDATE	accounts

			SET	balance	=	balance	-	200

	WHERE	account	=	:a
First Write, then Read: Conclusion
For this code, READ	COMMITTED is enough

to make one of the transactions succeed

(assuming a proper deadlock detection).
Exercise: Does this hold true in these cases too?
SELECT	sum(balance)

		FROM	accounts

	WHERE	account	IN	(1,2)	
(iff >= 200)
UPDATE	accounts

			SET	balance	=	balance	-	200

	WHERE	account	=	:a
SELECT	balance	FROM	accounts

	WHERE	account	=	:a	
UPDATE	accounts	SET	balance	=	:b

	WHERE	account	=	:a	
SELECT	sum(balance)

		FROM	accounts

	WHERE	account	IN	(1,2)
Write-Skew: General Case
When using lock-based isolation 

REPEATABLE	READ

covers with write-skew too.
What’s Bad About Locking?
What’s Bad About Locking?
Writers will always need to block writers anyway
What’s Bad About Locking?
Writers will always need to block writers anyway
Readers never block readers
What’s Bad About Locking?
Writers will always need to block writers anyway
Readers never block readers
Writers block readers,

readers block writers

(except in READ	UNCOMMITTED)
What’s Bad About Locking?
Writers will always need to block writers anyway
Readers never block readers
Writers block readers,

readers block writers

(except in READ	UNCOMMITTED)
Great!
What’s Bad About Locking?
Writers will always need to block writers anyway
Readers never block readers
Writers block readers,

readers block writers

(except in READ	UNCOMMITTED)
Not so
good
Great!
Multi Version Concurrency Control (MVCC)
Multi Version Concurrency Control (MVCC)
Instead of waiting for writers,

just use the previous committed version of the data

(pretend the read happened before the write)
Multi Version Concurrency Control (MVCC)
Instead of waiting for writers,

just use the previous committed version of the data

(pretend the read happened before the write)
The reader effectively works on a snapshot
Multi Version Concurrency Control (MVCC)
Instead of waiting for writers,

just use the previous committed version of the data

(pretend the read happened before the write)
The reader effectively works on a snapshot
This prevents all three phenomena mentioned in the standard:

dirty read

non-repeatable read

phantom read
Write Skew When Using a Snapshot
Transaction 1 Transaction 2Account Balance
1 100
2 100
Write Skew When Using a Snapshot
Transaction 1 Transaction 2
1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
Account Balance
1 100
2 100
Write Skew When Using a Snapshot
Transaction 1 Transaction 2
1 100
2 -100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
Account Balance
1 100
2 100
Write Skew When Using a Snapshot
Transaction 1 Transaction 2
1 100
2 -100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
Account Balance
1 100
2 100
Write Skew When Using a Snapshot
Transaction 1 Transaction 2
1 100
2 -100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
Account Balance
1 100
2 100
Write Skew When Using a Snapshot
Transaction 1 Transaction 2
1 100
2 -100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
Account Balance
1 100
2 100
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
1 -100
2 100
Write Skew When Using a Snapshot
Transaction 1 Transaction 2
1 100
2 -100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
Account Balance
1 100
2 100
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
1 -100
2 100
1 100
2 -100
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
Write Skew When Using a Snapshot
Transaction 1 Transaction 2
1 100
2 -100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
Account Balance
1 -100
2 -100
1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
Account Balance
1 100
2 100
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
1 -100
2 100
1 100
2 -100
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
Write Skew When Using a Snapshot
Transaction 1 Transaction 2
1 100
2 -100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=2
Account Balance
1 -100
2 -100
1 -100
2 100
UPDATE	accounts	
			SET	balance=balance-200	
	WHERE	account=1
Account Balance
1 100
2 100
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
1 -100
2 100
1 100
2 -100
SELECT	sum(balance)	
		FROM	accounts	
	WHERE	account	IN	(1,2)
Can Snapshots and Serialisability Coexist?
Can Snapshots and Serialisability Coexist?
Simple snapshots cannot prevent write skew abnormalities.
Can Snapshots and Serialisability Coexist?
Simple snapshots cannot prevent write skew abnormalities.
But most transactions are

not vulnerable to write skew anyway.

(e.g., TPC-C is not vulnerable at all)
Can Snapshots and Serialisability Coexist?
Simple snapshots cannot prevent write skew abnormalities.
But most transactions are

not vulnerable to write skew anyway.

(e.g., TPC-C is not vulnerable at all)
The only two ways to prevent write skew

abnormalities at the database are

(1) putting locks when reading and

(2) proofing the serialization graph is acyclic
Can Snapshots and Serialisability Coexist?
Simple snapshots cannot prevent write skew abnormalities.
But most transactions are

not vulnerable to write skew anyway.

(e.g., TPC-C is not vulnerable at all)
The only two ways to prevent write skew

abnormalities at the database are

(1) putting locks when reading and

(2) proofing the serialization graph is acyclic
READ ONLY
transactions
are an important
special case
Can Snapshots and Serialisability Coexist?
Simple snapshots cannot prevent write skew abnormalities.
But most transactions are

not vulnerable to write skew anyway.

(e.g., TPC-C is not vulnerable at all)
The only two ways to prevent write skew

abnormalities at the database are

(1) putting locks when reading and

(2) proofing the serialization graph is acyclic
READ ONLY
transactions
are an important
special case
InnoDB

SQL Server

DB2
Can Snapshots and Serialisability Coexist?
Simple snapshots cannot prevent write skew abnormalities.
But most transactions are

not vulnerable to write skew anyway.

(e.g., TPC-C is not vulnerable at all)
The only two ways to prevent write skew

abnormalities at the database are

(1) putting locks when reading and

(2) proofing the serialization graph is acyclic
READ ONLY
transactions
are an important
special case
InnoDB

SQL Server

DB2 PostgreSQL
Can Snapshots and Serialisability Coexist?
Simple snapshots cannot prevent write skew abnormalities.
But most transactions are

not vulnerable to write skew anyway.

(e.g., TPC-C is not vulnerable at all)
The only two ways to prevent write skew

abnormalities at the database are

(1) putting locks when reading and

(2) proofing the serialization graph is acyclic
READ ONLY
transactions
are an important
special case
InnoDB

SQL Server

DB2 PostgreSQL
Oracle?
Can Snapshots and Serialisability Coexist?
Simple snapshots cannot prevent write skew abnormalities.
But most transactions are

not vulnerable to write skew anyway.

(e.g., TPC-C is not vulnerable at all)
The only two ways to prevent write skew

abnormalities at the database are

(1) putting locks when reading and

(2) proofing the serialization graph is acyclic
READ ONLY
transactions
are an important
special case
InnoDB

SQL Server

DB2 PostgreSQL
Can Snapshots and Serialisability Coexist?
PostgreSQL 9.1+ is the only(?) database that

uses MVCC and detects serialization graph cycles.

➜ Use SERIALIZABLE and you are done

In InnoDB (MySQL, MariaDB) and SQL Server, MVCC and Lock-Based SERIALIZABLE
isolation can be
How to use Snapshots and Prevent Write Skew
Transaction type
READ ONLY READ/WRITE
DB2 LUW
REPEATABLE	READ

(=SERIALIZABLE)
REPEATABLE	READ

(=SERIALIZALBE)
InnoDB

(MySQL, MariaDB)
REPEATABLE	READ1 SERIALIZABLE
PostgreSQL 9.1+ SERIALIZABLE SERIALIZABLE
Oracle SERIALIZABLE SERIALIZABLE
SQL Server 2005+ SNAPSHOT SERIALIZABLE
1: MySQL’s REPEATABLE READ also protects against phantom reads.
KEY
No shared locks

No write skew issues
Shared locks

No write skew issues
No shared locks

Write skew issues
SQL Server is Special
Except SQL Server, all MVCC capable databases use it per default.
In SQL Server, it must be enabled:

ALTER	DATABASE	…	SET	allow_snapshot_isolation	on;
This will make write operations keep old versions

(needs more space in permanent DB and tempdb)
Then you can use SNAPSHOT isolation (e.g., in read-only transactions).

Staying in SERIALISABLE for read/write transactions prevents write skew issues.

Note: Hint remain effective: NOLOCK will still do dirty-read in SNAPSHOT isolation.
Keep Transactions Focused
Don’t select data that is irrelevant for the transaction.

(an innocent looking function-call might query something you are not aware of)
Do unrelated stuff in distinct transactions.
Work fast.

(Never, ever keep a transaction open waiting for someone)

(In the code, but also not in your ad-hoc SQL session!)
Tune your statements.

(That makes your transactions shorter too)

More Related Content

What's hot

Migration to Oracle Multitenant
Migration to Oracle MultitenantMigration to Oracle Multitenant
Migration to Oracle MultitenantJitendra Singh
 
PostgreSQL Replication High Availability Methods
PostgreSQL Replication High Availability MethodsPostgreSQL Replication High Availability Methods
PostgreSQL Replication High Availability MethodsMydbops
 
Oracle RAC 19c: Best Practices and Secret Internals
Oracle RAC 19c: Best Practices and Secret InternalsOracle RAC 19c: Best Practices and Secret Internals
Oracle RAC 19c: Best Practices and Secret InternalsAnil Nair
 
Best practices for MySQL High Availability Tutorial
Best practices for MySQL High Availability TutorialBest practices for MySQL High Availability Tutorial
Best practices for MySQL High Availability TutorialColin Charles
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL AdministrationEDB
 
2023 COSCUP - Whats new in PostgreSQL 16
2023 COSCUP - Whats new in PostgreSQL 162023 COSCUP - Whats new in PostgreSQL 16
2023 COSCUP - Whats new in PostgreSQL 16José Lin
 
ClickHouse Monitoring 101: What to monitor and how
ClickHouse Monitoring 101: What to monitor and howClickHouse Monitoring 101: What to monitor and how
ClickHouse Monitoring 101: What to monitor and howAltinity Ltd
 
Understanding InfluxDB Basics: Tags, Fields and Measurements
Understanding InfluxDB Basics: Tags, Fields and MeasurementsUnderstanding InfluxDB Basics: Tags, Fields and Measurements
Understanding InfluxDB Basics: Tags, Fields and MeasurementsInfluxData
 
mysql 8.0 architecture and enhancement
mysql 8.0 architecture and enhancementmysql 8.0 architecture and enhancement
mysql 8.0 architecture and enhancementlalit choudhary
 
Oracle Database Availability & Scalability Across Versions & Editions
Oracle Database Availability & Scalability Across Versions & EditionsOracle Database Availability & Scalability Across Versions & Editions
Oracle Database Availability & Scalability Across Versions & EditionsMarkus Michalewicz
 
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)Jean-François Gagné
 
PostgreSQL Streaming Replication Cheatsheet
PostgreSQL Streaming Replication CheatsheetPostgreSQL Streaming Replication Cheatsheet
PostgreSQL Streaming Replication CheatsheetAlexey Lesovsky
 
Materialized Views and Secondary Indexes in Scylla: They Are finally here!
Materialized Views and Secondary Indexes in Scylla: They Are finally here!Materialized Views and Secondary Indexes in Scylla: They Are finally here!
Materialized Views and Secondary Indexes in Scylla: They Are finally here!ScyllaDB
 
Oracle Transparent Data Encryption (TDE) 12c
Oracle Transparent Data Encryption (TDE) 12cOracle Transparent Data Encryption (TDE) 12c
Oracle Transparent Data Encryption (TDE) 12cNabeel Yoosuf
 
How to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and HudiHow to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and HudiFlink Forward
 
MV2ADB - Move to Oracle Autonomous Database in One-click
MV2ADB - Move to Oracle Autonomous Database in One-clickMV2ADB - Move to Oracle Autonomous Database in One-click
MV2ADB - Move to Oracle Autonomous Database in One-clickRuggero Citton
 
Errant GTIDs breaking replication @ Percona Live 2019
Errant GTIDs breaking replication @ Percona Live 2019Errant GTIDs breaking replication @ Percona Live 2019
Errant GTIDs breaking replication @ Percona Live 2019Dieter Adriaenssens
 
Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Flink Forward
 

What's hot (20)

Migration to Oracle Multitenant
Migration to Oracle MultitenantMigration to Oracle Multitenant
Migration to Oracle Multitenant
 
ELK Stack
ELK StackELK Stack
ELK Stack
 
PostgreSQL Replication High Availability Methods
PostgreSQL Replication High Availability MethodsPostgreSQL Replication High Availability Methods
PostgreSQL Replication High Availability Methods
 
Oracle RAC 19c: Best Practices and Secret Internals
Oracle RAC 19c: Best Practices and Secret InternalsOracle RAC 19c: Best Practices and Secret Internals
Oracle RAC 19c: Best Practices and Secret Internals
 
Best practices for MySQL High Availability Tutorial
Best practices for MySQL High Availability TutorialBest practices for MySQL High Availability Tutorial
Best practices for MySQL High Availability Tutorial
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
2023 COSCUP - Whats new in PostgreSQL 16
2023 COSCUP - Whats new in PostgreSQL 162023 COSCUP - Whats new in PostgreSQL 16
2023 COSCUP - Whats new in PostgreSQL 16
 
ClickHouse Monitoring 101: What to monitor and how
ClickHouse Monitoring 101: What to monitor and howClickHouse Monitoring 101: What to monitor and how
ClickHouse Monitoring 101: What to monitor and how
 
Understanding InfluxDB Basics: Tags, Fields and Measurements
Understanding InfluxDB Basics: Tags, Fields and MeasurementsUnderstanding InfluxDB Basics: Tags, Fields and Measurements
Understanding InfluxDB Basics: Tags, Fields and Measurements
 
mysql 8.0 architecture and enhancement
mysql 8.0 architecture and enhancementmysql 8.0 architecture and enhancement
mysql 8.0 architecture and enhancement
 
Oracle Database Availability & Scalability Across Versions & Editions
Oracle Database Availability & Scalability Across Versions & EditionsOracle Database Availability & Scalability Across Versions & Editions
Oracle Database Availability & Scalability Across Versions & Editions
 
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
MySQL Parallel Replication: All the 5.7 and 8.0 Details (LOGICAL_CLOCK)
 
MyRocks Deep Dive
MyRocks Deep DiveMyRocks Deep Dive
MyRocks Deep Dive
 
PostgreSQL Streaming Replication Cheatsheet
PostgreSQL Streaming Replication CheatsheetPostgreSQL Streaming Replication Cheatsheet
PostgreSQL Streaming Replication Cheatsheet
 
Materialized Views and Secondary Indexes in Scylla: They Are finally here!
Materialized Views and Secondary Indexes in Scylla: They Are finally here!Materialized Views and Secondary Indexes in Scylla: They Are finally here!
Materialized Views and Secondary Indexes in Scylla: They Are finally here!
 
Oracle Transparent Data Encryption (TDE) 12c
Oracle Transparent Data Encryption (TDE) 12cOracle Transparent Data Encryption (TDE) 12c
Oracle Transparent Data Encryption (TDE) 12c
 
How to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and HudiHow to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and Hudi
 
MV2ADB - Move to Oracle Autonomous Database in One-click
MV2ADB - Move to Oracle Autonomous Database in One-clickMV2ADB - Move to Oracle Autonomous Database in One-click
MV2ADB - Move to Oracle Autonomous Database in One-click
 
Errant GTIDs breaking replication @ Percona Live 2019
Errant GTIDs breaking replication @ Percona Live 2019Errant GTIDs breaking replication @ Percona Live 2019
Errant GTIDs breaking replication @ Percona Live 2019
 
Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...
 

Similar to SQL Transactions - What they are good for and how they work

Database Transactions and SQL Server Concurrency
Database Transactions and SQL Server ConcurrencyDatabase Transactions and SQL Server Concurrency
Database Transactions and SQL Server ConcurrencyBoris Hristov
 
CQRS & event sourcing in the wild
CQRS & event sourcing in the wildCQRS & event sourcing in the wild
CQRS & event sourcing in the wildMichiel Rook
 
Formal Verification of Web Service Interaction Contracts
Formal Verification of Web Service Interaction ContractsFormal Verification of Web Service Interaction Contracts
Formal Verification of Web Service Interaction ContractsGera Shegalov
 
The Nightmare of Locking, Blocking and Isolation Levels!
The Nightmare of Locking, Blocking and Isolation Levels!The Nightmare of Locking, Blocking and Isolation Levels!
The Nightmare of Locking, Blocking and Isolation Levels!Boris Hristov
 
Oracle - Program with PL/SQL - Lession 04
Oracle - Program with PL/SQL - Lession 04Oracle - Program with PL/SQL - Lession 04
Oracle - Program with PL/SQL - Lession 04Thuan Nguyen
 
Welcome to the nightmare of locking, blocking and isolation levels!
Welcome to the nightmare of locking, blocking and isolation levels!Welcome to the nightmare of locking, blocking and isolation levels!
Welcome to the nightmare of locking, blocking and isolation levels!Boris Hristov
 
MySQL GTID Concepts, Implementation and troubleshooting
MySQL GTID Concepts, Implementation and troubleshooting MySQL GTID Concepts, Implementation and troubleshooting
MySQL GTID Concepts, Implementation and troubleshooting Mydbops
 
Meg bernal insight2014 4219
Meg bernal insight2014 4219Meg bernal insight2014 4219
Meg bernal insight2014 4219Peter Schouboe
 
SQL Performance Solutions: Refactor Mercilessly, Index Wisely
SQL Performance Solutions: Refactor Mercilessly, Index WiselySQL Performance Solutions: Refactor Mercilessly, Index Wisely
SQL Performance Solutions: Refactor Mercilessly, Index WiselyEnkitec
 
PROCEDURE FOR MONTH END DAY 1 INCLUDING SCREEN SHOT & SCRIPTS (Final rev 090211)
PROCEDURE FOR MONTH END DAY 1 INCLUDING SCREEN SHOT & SCRIPTS (Final rev 090211)PROCEDURE FOR MONTH END DAY 1 INCLUDING SCREEN SHOT & SCRIPTS (Final rev 090211)
PROCEDURE FOR MONTH END DAY 1 INCLUDING SCREEN SHOT & SCRIPTS (Final rev 090211)Shakil Zaman
 
What is Advance DBMS, introduction to ADBMS
What is Advance DBMS, introduction to ADBMSWhat is Advance DBMS, introduction to ADBMS
What is Advance DBMS, introduction to ADBMSSaqibAlam14
 
Programming in Oracle with PL/SQL
Programming in Oracle with PL/SQLProgramming in Oracle with PL/SQL
Programming in Oracle with PL/SQLlubna19
 
Transaction management and concurrency
Transaction management and concurrencyTransaction management and concurrency
Transaction management and concurrencyVenkata Sreeram
 
Transaction Properties(ACID Properties)
Transaction Properties(ACID Properties)Transaction Properties(ACID Properties)
Transaction Properties(ACID Properties)Yaksh Jethva
 
How Many Ways Can I Manage Oracle GoldenGate?
How Many Ways Can I Manage Oracle GoldenGate?How Many Ways Can I Manage Oracle GoldenGate?
How Many Ways Can I Manage Oracle GoldenGate?Enkitec
 
The road to continuous deployment (PHPCon Poland 2016)
The road to continuous deployment (PHPCon Poland 2016)The road to continuous deployment (PHPCon Poland 2016)
The road to continuous deployment (PHPCon Poland 2016)Michiel Rook
 

Similar to SQL Transactions - What they are good for and how they work (20)

Transaction
TransactionTransaction
Transaction
 
Database Transactions and SQL Server Concurrency
Database Transactions and SQL Server ConcurrencyDatabase Transactions and SQL Server Concurrency
Database Transactions and SQL Server Concurrency
 
CQRS & event sourcing in the wild
CQRS & event sourcing in the wildCQRS & event sourcing in the wild
CQRS & event sourcing in the wild
 
MySQL Transactions
MySQL TransactionsMySQL Transactions
MySQL Transactions
 
Formal Verification of Web Service Interaction Contracts
Formal Verification of Web Service Interaction ContractsFormal Verification of Web Service Interaction Contracts
Formal Verification of Web Service Interaction Contracts
 
The Nightmare of Locking, Blocking and Isolation Levels!
The Nightmare of Locking, Blocking and Isolation Levels!The Nightmare of Locking, Blocking and Isolation Levels!
The Nightmare of Locking, Blocking and Isolation Levels!
 
Oracle - Program with PL/SQL - Lession 04
Oracle - Program with PL/SQL - Lession 04Oracle - Program with PL/SQL - Lession 04
Oracle - Program with PL/SQL - Lession 04
 
Welcome to the nightmare of locking, blocking and isolation levels!
Welcome to the nightmare of locking, blocking and isolation levels!Welcome to the nightmare of locking, blocking and isolation levels!
Welcome to the nightmare of locking, blocking and isolation levels!
 
MySQL GTID Concepts, Implementation and troubleshooting
MySQL GTID Concepts, Implementation and troubleshooting MySQL GTID Concepts, Implementation and troubleshooting
MySQL GTID Concepts, Implementation and troubleshooting
 
Meg bernal insight2014 4219
Meg bernal insight2014 4219Meg bernal insight2014 4219
Meg bernal insight2014 4219
 
SQL Performance Solutions: Refactor Mercilessly, Index Wisely
SQL Performance Solutions: Refactor Mercilessly, Index WiselySQL Performance Solutions: Refactor Mercilessly, Index Wisely
SQL Performance Solutions: Refactor Mercilessly, Index Wisely
 
PROCEDURE FOR MONTH END DAY 1 INCLUDING SCREEN SHOT & SCRIPTS (Final rev 090211)
PROCEDURE FOR MONTH END DAY 1 INCLUDING SCREEN SHOT & SCRIPTS (Final rev 090211)PROCEDURE FOR MONTH END DAY 1 INCLUDING SCREEN SHOT & SCRIPTS (Final rev 090211)
PROCEDURE FOR MONTH END DAY 1 INCLUDING SCREEN SHOT & SCRIPTS (Final rev 090211)
 
Sql transacation
Sql transacationSql transacation
Sql transacation
 
Transaction
TransactionTransaction
Transaction
 
What is Advance DBMS, introduction to ADBMS
What is Advance DBMS, introduction to ADBMSWhat is Advance DBMS, introduction to ADBMS
What is Advance DBMS, introduction to ADBMS
 
Programming in Oracle with PL/SQL
Programming in Oracle with PL/SQLProgramming in Oracle with PL/SQL
Programming in Oracle with PL/SQL
 
Transaction management and concurrency
Transaction management and concurrencyTransaction management and concurrency
Transaction management and concurrency
 
Transaction Properties(ACID Properties)
Transaction Properties(ACID Properties)Transaction Properties(ACID Properties)
Transaction Properties(ACID Properties)
 
How Many Ways Can I Manage Oracle GoldenGate?
How Many Ways Can I Manage Oracle GoldenGate?How Many Ways Can I Manage Oracle GoldenGate?
How Many Ways Can I Manage Oracle GoldenGate?
 
The road to continuous deployment (PHPCon Poland 2016)
The road to continuous deployment (PHPCon Poland 2016)The road to continuous deployment (PHPCon Poland 2016)
The road to continuous deployment (PHPCon Poland 2016)
 

More from Markus Winand

Standard SQL features where PostgreSQL beats its competitors
Standard SQL features where PostgreSQL beats its competitorsStandard SQL features where PostgreSQL beats its competitors
Standard SQL features where PostgreSQL beats its competitorsMarkus Winand
 
Four* Major Database Releases of 2017 in Review
Four* Major Database Releases of 2017 in ReviewFour* Major Database Releases of 2017 in Review
Four* Major Database Releases of 2017 in ReviewMarkus Winand
 
Row Pattern Matching in SQL:2016
Row Pattern Matching in SQL:2016Row Pattern Matching in SQL:2016
Row Pattern Matching in SQL:2016Markus Winand
 
Backend to Frontend: When database optimization affects the full stack
Backend to Frontend: When database optimization affects the full stackBackend to Frontend: When database optimization affects the full stack
Backend to Frontend: When database optimization affects the full stackMarkus Winand
 
Modern SQL in Open Source and Commercial Databases
Modern SQL in Open Source and Commercial DatabasesModern SQL in Open Source and Commercial Databases
Modern SQL in Open Source and Commercial DatabasesMarkus Winand
 
Volkskrankheit "Stiefmuetterliche Indizierung"
Volkskrankheit "Stiefmuetterliche Indizierung"Volkskrankheit "Stiefmuetterliche Indizierung"
Volkskrankheit "Stiefmuetterliche Indizierung"Markus Winand
 
SQL Performance - Vienna System Architects Meetup 20131202
SQL Performance - Vienna System Architects Meetup 20131202SQL Performance - Vienna System Architects Meetup 20131202
SQL Performance - Vienna System Architects Meetup 20131202Markus Winand
 
Indexes: The neglected performance all rounder
Indexes: The neglected performance all rounderIndexes: The neglected performance all rounder
Indexes: The neglected performance all rounderMarkus Winand
 
Pagination Done the Right Way
Pagination Done the Right WayPagination Done the Right Way
Pagination Done the Right WayMarkus Winand
 

More from Markus Winand (9)

Standard SQL features where PostgreSQL beats its competitors
Standard SQL features where PostgreSQL beats its competitorsStandard SQL features where PostgreSQL beats its competitors
Standard SQL features where PostgreSQL beats its competitors
 
Four* Major Database Releases of 2017 in Review
Four* Major Database Releases of 2017 in ReviewFour* Major Database Releases of 2017 in Review
Four* Major Database Releases of 2017 in Review
 
Row Pattern Matching in SQL:2016
Row Pattern Matching in SQL:2016Row Pattern Matching in SQL:2016
Row Pattern Matching in SQL:2016
 
Backend to Frontend: When database optimization affects the full stack
Backend to Frontend: When database optimization affects the full stackBackend to Frontend: When database optimization affects the full stack
Backend to Frontend: When database optimization affects the full stack
 
Modern SQL in Open Source and Commercial Databases
Modern SQL in Open Source and Commercial DatabasesModern SQL in Open Source and Commercial Databases
Modern SQL in Open Source and Commercial Databases
 
Volkskrankheit "Stiefmuetterliche Indizierung"
Volkskrankheit "Stiefmuetterliche Indizierung"Volkskrankheit "Stiefmuetterliche Indizierung"
Volkskrankheit "Stiefmuetterliche Indizierung"
 
SQL Performance - Vienna System Architects Meetup 20131202
SQL Performance - Vienna System Architects Meetup 20131202SQL Performance - Vienna System Architects Meetup 20131202
SQL Performance - Vienna System Architects Meetup 20131202
 
Indexes: The neglected performance all rounder
Indexes: The neglected performance all rounderIndexes: The neglected performance all rounder
Indexes: The neglected performance all rounder
 
Pagination Done the Right Way
Pagination Done the Right WayPagination Done the Right Way
Pagination Done the Right Way
 

Recently uploaded

Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 

Recently uploaded (20)

Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 

SQL Transactions - What they are good for and how they work

  • 1. © 2016 by Markus Winand Transactions What they are good for and how they work
  • 2. ( ) Transactions are Brackets Starting a transaction: Explicit: START TRANSACTION Implicit: INSERT / UPDATE / DELETE SELECT CREATE Terminating a transaction: Explicit: COMMIT ROLLBACK Implementation defined: Due to errors CREATE … Varies
 amongst
 products
  • 3. Transactions have Characteristics Access-Mode: READ_ONLY READ_WRITE Constraint Mode: IMMEDIATE DEFERRED Transaction-Isolation-Level: READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE Diagnostic Size: Archaic
  • 4. Transactions have Characteristics Access-Mode: READ_ONLY READ_WRITE Constraint Mode: IMMEDIATE DEFERRED Transaction-Isolation-Level: READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE Diagnostic Size: Archaic Not strictly a
 transaction 
 characteristic
  • 5. Setting Transaction Characteristics With explicit transaction begin: START TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE For next (implicitly started) transaction: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE The standard uses SERIALIZEABLE as default,
 but most implementations default to READ COMMITTED. In practice: Use an API if possible.
  • 6. Use Cases for Transactions
  • 7. Use Cases for Transactions When writing
  • 8. Use Cases for Transactions Backing out incomplete changes… … by the program with rollback … by the RDBMS in case of crash When writing
  • 9. Use Cases for Transactions Backing out incomplete changes… … by the program with rollback … by the RDBMS in case of crash When writing (Boring)
  • 10. Use Cases for Transactions Backing out incomplete changes… … by the program with rollback … by the RDBMS in case of crash When writing When reading (Boring)
  • 11. Use Cases for Transactions Backing out incomplete changes… … by the program with rollback … by the RDBMS in case of crash When writing When reading Simplify concurrent programs… … by utilising the right
 transaction isolation level (Boring)
  • 12. Use Cases for Transactions Backing out incomplete changes… … by the program with rollback … by the RDBMS in case of crash When writing When reading Simplify concurrent programs… … by utilising the right
 transaction isolation level (Boring) Amazing!
  • 13. Standard Transaction Isolation Levels Phenomena covered by the Standard Dirty Read Non-Repeatable Read Phantom Read READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE STOP STOP STOP STOPSTOPSTOP
  • 14. Standard Transaction Isolation Levels Phenomena covered by the Standard Dirty Read Non-Repeatable Read Phantom Read READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE STOP STOP STOP STOPSTOPSTOP Incomplete,
 unfortunately
  • 15. How Comes? SQL is a declarative language:
 the standard doesn’t say how to implement it,
 it just describes the effects it has. Unfortunately, SQL-92 was written with locking in mind,
 and thus only describes the effects in the granularity
 in which they appear whey implemented using locking. Although a commonly known issue, it was never changed. https://en.wikipedia.org/wiki/Snapshot_isolation
  • 16. Transaction Isolation Using Locks Phenomena covered by the Standard Dirty Read Non-Repeatable Read Phantom Read READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE ▶ Row (short) ▶ Row (TX) ▶ Row (TX) ▶ Predicate (TX) STOP STOP STOP STOPSTOPSTOP
  • 17. Transaction Isolation Using Locks Phenomena covered by the Standard Dirty Read Non-Repeatable Read Phantom Read READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE ▶ Row (short) ▶ Row (TX) ▶ Row (TX) ▶ Predicate (TX) STOP STOP STOP STOPSTOPSTOP Locks preventing
 phenomena:
 What (how long)
  • 18. Transaction Isolation Using Locks Phenomena covered by the Standard Dirty Read Non-Repeatable Read Phantom Read READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE ▶ Row (short) ▶ Row (TX) ▶ Row (TX) ▶ Predicate (TX) STOP STOP STOP STOPSTOPSTOP Locks preventing
 phenomena:
 What (how long)
  • 19. Transaction Isolation Using Locks Phenomena covered by the Standard Dirty Read Non-Repeatable Read Phantom Read READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE ▶ Row (short) ▶ Row (TX) ▶ Row (TX) ▶ Predicate (TX) STOP STOP STOP STOPSTOPSTOP Locks preventing
 phenomena:
 What (how long)
  • 20. Transaction Isolation Using Locks Phenomena covered by the Standard Dirty Read Non-Repeatable Read Phantom Read READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE ▶ Row (short) ▶ Row (TX) ▶ Row (TX) ▶ Predicate (TX) STOP STOP STOP STOPSTOPSTOP Locks preventing
 phenomena:
 What (how long)
  • 21. Example: Write Skew Make sure the sum of two rows is positive
 (e.g., two bank accounts belonging to the same person) Code to withdraw from one account
 (naive schema and not considering concurrency) UPDATE accounts
 SET balance = balance - 200
 WHERE account = 1 SELECT SUM(balance)
 FROM accounts
 WHERE account IN (1,2) >= 0 commit 
 <0 rollback
  • 22. Examples: Disclaimer The following examples just demonstrate
 one possible way two transactions could interact. The examples are by no means exhaustive.
  • 23. Write Skew in Lock-based READ UNCOMMITTED Account Balance 1 100 2 100 Transaction 1 Transaction 2
  • 24. Write Skew in Lock-based READ UNCOMMITTED Account Balance 1 100 2 100 Transaction 1 Transaction 2 ▶ 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1
  • 25. Write Skew in Lock-based READ UNCOMMITTED Account Balance 1 100 2 100 Transaction 1 Transaction 2 ▶ 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 ▶ 1 -100 2 -100 ◀ UPDATE accounts SET balance=balance-200 WHERE account=2
  • 26. Write Skew in Lock-based READ UNCOMMITTED Account Balance 1 100 2 100 Transaction 1 Transaction 2 ▶ 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 ▶ 1 -100 2 -100 ◀ UPDATE accounts SET balance=balance-200 WHERE account=2 ▶ 1 -100 2 -100 ◀ SELECT sum(balance) FROM accounts WHERE account IN (1,2)
  • 27. Write Skew in Lock-based READ UNCOMMITTED Account Balance 1 100 2 100 Transaction 1 Transaction 2 ▶ 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 ▶ 1 -100 2 -100 ◀ UPDATE accounts SET balance=balance-200 WHERE account=2 ▶ 1 -100 2 -100 ◀ SELECT sum(balance) FROM accounts WHERE account IN (1,2) -200
  • 28. Write Skew in Lock-based READ UNCOMMITTED Account Balance 1 100 2 100 Transaction 1 Transaction 2 ▶ 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 ▶ 1 -100 2 -100 ◀ UPDATE accounts SET balance=balance-200 WHERE account=2 ▶ 1 -100 2 -100 ◀ SELECT sum(balance) FROM accounts WHERE account IN (1,2) ▶ 1 -100 2 -100 ◀ SELECT sum(balance) FROM accounts WHERE account IN (1,2) -200
  • 29. Write Skew in Lock-based READ UNCOMMITTED Account Balance 1 100 2 100 Transaction 1 Transaction 2 ▶ 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 ▶ 1 -100 2 -100 ◀ UPDATE accounts SET balance=balance-200 WHERE account=2 ▶ 1 -100 2 -100 ◀ SELECT sum(balance) FROM accounts WHERE account IN (1,2) ▶ 1 -100 2 -100 ◀ SELECT sum(balance) FROM accounts WHERE account IN (1,2) -200 -200
  • 30. Write Skew in Lock-based READ COMMITTED
  • 31. Write Skew in Lock-based READ COMMITTED Account Balance 1 100 2 100 Transaction 1 Transaction 2
  • 32. Write Skew in Lock-based READ COMMITTED Account Balance 1 100 2 100 Transaction 1 Transaction 2 ▶ 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1
  • 33. Write Skew in Lock-based READ COMMITTED Account Balance 1 100 2 100 Transaction 1 Transaction 2 ▶ 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 ▶ 1 -100 2 -100 ◀ UPDATE accounts SET balance=balance-200 WHERE account=2
  • 34. Write Skew in Lock-based READ COMMITTED Account Balance 1 100 2 100 Transaction 1 Transaction 2 ▶ 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 ▶ 1 -100 2 -100 ◀ UPDATE accounts SET balance=balance-200 WHERE account=2 ▶ 1 -100 2 -100 ◀ SELECT sum(balance) FROM accounts WHERE account IN (1,2) Blocked ▶
  • 35. Write Skew in Lock-based READ COMMITTED Account Balance 1 100 2 100 Transaction 1 Transaction 2 ▶ 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 ▶ 1 -100 2 -100 ◀ UPDATE accounts SET balance=balance-200 WHERE account=2 ▶ 1 -100 2 -100 ◀ SELECT sum(balance) FROM accounts WHERE account IN (1,2) Blocked Dead lock ▶ ◀▶ 1 -100 2 -100 ◀ SELECT sum(balance) FROM accounts WHERE account IN (1,2)▶
  • 36. First Write, then Read: Conclusion For this code, READ COMMITTED is enough
 to make one of the transactions succeed
 (assuming a proper deadlock detection).
  • 37. First Write, then Read: Conclusion For this code, READ COMMITTED is enough
 to make one of the transactions succeed
 (assuming a proper deadlock detection). Exercise: Does this hold true in these cases too?
  • 38. First Write, then Read: Conclusion For this code, READ COMMITTED is enough
 to make one of the transactions succeed
 (assuming a proper deadlock detection). Exercise: Does this hold true in these cases too? SELECT sum(balance)
 FROM accounts
 WHERE account IN (1,2) (iff >= 200) UPDATE accounts
 SET balance = balance - 200
 WHERE account = :a
  • 39. First Write, then Read: Conclusion For this code, READ COMMITTED is enough
 to make one of the transactions succeed
 (assuming a proper deadlock detection). Exercise: Does this hold true in these cases too? SELECT sum(balance)
 FROM accounts
 WHERE account IN (1,2) (iff >= 200) UPDATE accounts
 SET balance = balance - 200
 WHERE account = :a SELECT balance FROM accounts
 WHERE account = :a UPDATE accounts SET balance = :b
 WHERE account = :a SELECT sum(balance)
 FROM accounts
 WHERE account IN (1,2)
  • 40. Write-Skew: General Case When using lock-based isolation 
 REPEATABLE READ
 covers with write-skew too.
  • 41. What’s Bad About Locking?
  • 42. What’s Bad About Locking? Writers will always need to block writers anyway
  • 43. What’s Bad About Locking? Writers will always need to block writers anyway Readers never block readers
  • 44. What’s Bad About Locking? Writers will always need to block writers anyway Readers never block readers Writers block readers,
 readers block writers
 (except in READ UNCOMMITTED)
  • 45. What’s Bad About Locking? Writers will always need to block writers anyway Readers never block readers Writers block readers,
 readers block writers
 (except in READ UNCOMMITTED) Great!
  • 46. What’s Bad About Locking? Writers will always need to block writers anyway Readers never block readers Writers block readers,
 readers block writers
 (except in READ UNCOMMITTED) Not so good Great!
  • 47. Multi Version Concurrency Control (MVCC)
  • 48. Multi Version Concurrency Control (MVCC) Instead of waiting for writers,
 just use the previous committed version of the data
 (pretend the read happened before the write)
  • 49. Multi Version Concurrency Control (MVCC) Instead of waiting for writers,
 just use the previous committed version of the data
 (pretend the read happened before the write) The reader effectively works on a snapshot
  • 50. Multi Version Concurrency Control (MVCC) Instead of waiting for writers,
 just use the previous committed version of the data
 (pretend the read happened before the write) The reader effectively works on a snapshot This prevents all three phenomena mentioned in the standard:
 dirty read
 non-repeatable read
 phantom read
  • 51. Write Skew When Using a Snapshot Transaction 1 Transaction 2Account Balance 1 100 2 100
  • 52. Write Skew When Using a Snapshot Transaction 1 Transaction 2 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 Account Balance 1 100 2 100
  • 53. Write Skew When Using a Snapshot Transaction 1 Transaction 2 1 100 2 -100 UPDATE accounts SET balance=balance-200 WHERE account=2 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 Account Balance 1 100 2 100
  • 54. Write Skew When Using a Snapshot Transaction 1 Transaction 2 1 100 2 -100 UPDATE accounts SET balance=balance-200 WHERE account=2 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 Account Balance 1 100 2 100
  • 55. Write Skew When Using a Snapshot Transaction 1 Transaction 2 1 100 2 -100 UPDATE accounts SET balance=balance-200 WHERE account=2 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 Account Balance 1 100 2 100
  • 56. Write Skew When Using a Snapshot Transaction 1 Transaction 2 1 100 2 -100 UPDATE accounts SET balance=balance-200 WHERE account=2 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 Account Balance 1 100 2 100 SELECT sum(balance) FROM accounts WHERE account IN (1,2) 1 -100 2 100
  • 57. Write Skew When Using a Snapshot Transaction 1 Transaction 2 1 100 2 -100 UPDATE accounts SET balance=balance-200 WHERE account=2 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 Account Balance 1 100 2 100 SELECT sum(balance) FROM accounts WHERE account IN (1,2) 1 -100 2 100 1 100 2 -100 SELECT sum(balance) FROM accounts WHERE account IN (1,2)
  • 58. Write Skew When Using a Snapshot Transaction 1 Transaction 2 1 100 2 -100 UPDATE accounts SET balance=balance-200 WHERE account=2 Account Balance 1 -100 2 -100 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 Account Balance 1 100 2 100 SELECT sum(balance) FROM accounts WHERE account IN (1,2) 1 -100 2 100 1 100 2 -100 SELECT sum(balance) FROM accounts WHERE account IN (1,2)
  • 59. Write Skew When Using a Snapshot Transaction 1 Transaction 2 1 100 2 -100 UPDATE accounts SET balance=balance-200 WHERE account=2 Account Balance 1 -100 2 -100 1 -100 2 100 UPDATE accounts SET balance=balance-200 WHERE account=1 Account Balance 1 100 2 100 SELECT sum(balance) FROM accounts WHERE account IN (1,2) 1 -100 2 100 1 100 2 -100 SELECT sum(balance) FROM accounts WHERE account IN (1,2)
  • 60. Can Snapshots and Serialisability Coexist?
  • 61. Can Snapshots and Serialisability Coexist? Simple snapshots cannot prevent write skew abnormalities.
  • 62. Can Snapshots and Serialisability Coexist? Simple snapshots cannot prevent write skew abnormalities. But most transactions are
 not vulnerable to write skew anyway.
 (e.g., TPC-C is not vulnerable at all)
  • 63. Can Snapshots and Serialisability Coexist? Simple snapshots cannot prevent write skew abnormalities. But most transactions are
 not vulnerable to write skew anyway.
 (e.g., TPC-C is not vulnerable at all) The only two ways to prevent write skew
 abnormalities at the database are
 (1) putting locks when reading and
 (2) proofing the serialization graph is acyclic
  • 64. Can Snapshots and Serialisability Coexist? Simple snapshots cannot prevent write skew abnormalities. But most transactions are
 not vulnerable to write skew anyway.
 (e.g., TPC-C is not vulnerable at all) The only two ways to prevent write skew
 abnormalities at the database are
 (1) putting locks when reading and
 (2) proofing the serialization graph is acyclic READ ONLY transactions are an important special case
  • 65. Can Snapshots and Serialisability Coexist? Simple snapshots cannot prevent write skew abnormalities. But most transactions are
 not vulnerable to write skew anyway.
 (e.g., TPC-C is not vulnerable at all) The only two ways to prevent write skew
 abnormalities at the database are
 (1) putting locks when reading and
 (2) proofing the serialization graph is acyclic READ ONLY transactions are an important special case InnoDB
 SQL Server
 DB2
  • 66. Can Snapshots and Serialisability Coexist? Simple snapshots cannot prevent write skew abnormalities. But most transactions are
 not vulnerable to write skew anyway.
 (e.g., TPC-C is not vulnerable at all) The only two ways to prevent write skew
 abnormalities at the database are
 (1) putting locks when reading and
 (2) proofing the serialization graph is acyclic READ ONLY transactions are an important special case InnoDB
 SQL Server
 DB2 PostgreSQL
  • 67. Can Snapshots and Serialisability Coexist? Simple snapshots cannot prevent write skew abnormalities. But most transactions are
 not vulnerable to write skew anyway.
 (e.g., TPC-C is not vulnerable at all) The only two ways to prevent write skew
 abnormalities at the database are
 (1) putting locks when reading and
 (2) proofing the serialization graph is acyclic READ ONLY transactions are an important special case InnoDB
 SQL Server
 DB2 PostgreSQL Oracle?
  • 68. Can Snapshots and Serialisability Coexist? Simple snapshots cannot prevent write skew abnormalities. But most transactions are
 not vulnerable to write skew anyway.
 (e.g., TPC-C is not vulnerable at all) The only two ways to prevent write skew
 abnormalities at the database are
 (1) putting locks when reading and
 (2) proofing the serialization graph is acyclic READ ONLY transactions are an important special case InnoDB
 SQL Server
 DB2 PostgreSQL
  • 69. Can Snapshots and Serialisability Coexist? PostgreSQL 9.1+ is the only(?) database that
 uses MVCC and detects serialization graph cycles.
 ➜ Use SERIALIZABLE and you are done
 In InnoDB (MySQL, MariaDB) and SQL Server, MVCC and Lock-Based SERIALIZABLE isolation can be
  • 70. How to use Snapshots and Prevent Write Skew Transaction type READ ONLY READ/WRITE DB2 LUW REPEATABLE READ
 (=SERIALIZABLE) REPEATABLE READ
 (=SERIALIZALBE) InnoDB
 (MySQL, MariaDB) REPEATABLE READ1 SERIALIZABLE PostgreSQL 9.1+ SERIALIZABLE SERIALIZABLE Oracle SERIALIZABLE SERIALIZABLE SQL Server 2005+ SNAPSHOT SERIALIZABLE 1: MySQL’s REPEATABLE READ also protects against phantom reads. KEY No shared locks
 No write skew issues Shared locks
 No write skew issues No shared locks
 Write skew issues
  • 71. SQL Server is Special Except SQL Server, all MVCC capable databases use it per default. In SQL Server, it must be enabled:
 ALTER DATABASE … SET allow_snapshot_isolation on; This will make write operations keep old versions
 (needs more space in permanent DB and tempdb) Then you can use SNAPSHOT isolation (e.g., in read-only transactions).
 Staying in SERIALISABLE for read/write transactions prevents write skew issues.
 Note: Hint remain effective: NOLOCK will still do dirty-read in SNAPSHOT isolation.
  • 72. Keep Transactions Focused Don’t select data that is irrelevant for the transaction.
 (an innocent looking function-call might query something you are not aware of) Do unrelated stuff in distinct transactions. Work fast.
 (Never, ever keep a transaction open waiting for someone)
 (In the code, but also not in your ad-hoc SQL session!) Tune your statements.
 (That makes your transactions shorter too)