Trouble with transactions
description
Transcript of Trouble with transactions
![Page 1: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/1.jpg)
Trouble with transactionsEvan Jones
http://evanjones.ca
![Page 2: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/2.jpg)
A love story
![Page 3: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/3.jpg)
A short love story
![Page 4: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/4.jpg)
A short love storyI fell in love…
![Page 5: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/5.jpg)
…with transactions
![Page 6: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/6.jpg)
…with transactions💖
💖💖
![Page 7: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/7.jpg)
Transactions =correct
programs
![Page 8: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/8.jpg)
A four year romance
![Page 9: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/9.jpg)
A four year romance
Main memory transactions
![Page 10: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/10.jpg)
A four year romance
Main memory transactions
Automatic partitioning
![Page 11: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/11.jpg)
A four year romance
Main memory transactions
Consolidating workloads
Automatic partitioning
![Page 12: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/12.jpg)
A four year romance
Main memory transactions
Consolidating workloads
Automatic partitioning
![Page 13: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/13.jpg)
![Page 14: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/14.jpg)
Applications, not databases
![Page 15: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/15.jpg)
connection.begin_transaction()print connection.query_balance()# ... do some computation ...print connection.query_balance()connection.commit()
Example: Read bank balance
![Page 16: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/16.jpg)
connection.begin_transaction()print connection.query_balance()# ... do some computation ...print connection.query_balance()connection.commit()
= $1000
Example: Read bank balance
![Page 17: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/17.jpg)
connection.begin_transaction()print connection.query_balance()# ... do some computation ...print connection.query_balance()connection.commit()
= $1000
= $1500
Example: Read bank balance
![Page 18: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/18.jpg)
connection.begin_transaction()print connection.query_balance()# ... do some computation ...print connection.query_balance()connection.commit()
= $1000
= $1500 ��
Example: Read bank balance
![Page 19: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/19.jpg)
💔#1: Weak defaults
Transactions = Serializability
Postgres: Read committedMySQL/InnoDB: “Repeatable read”
(reality: something weird)
![Page 20: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/20.jpg)
💔#1: Weak defaults
Transactions = Serializability 💖
Postgres: Read committedMySQL/InnoDB: “Repeatable read”
(reality: something weird)
![Page 21: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/21.jpg)
💔#1: Weak defaults
Transactions = Serializability 💖
Postgres: Read committedMySQL/InnoDB: “Repeatable read”
(reality: something weird)
Set SERIALIZABLE by default
![Page 22: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/22.jpg)
try: connection.begin_transaction() balance = connection.query_balance() connection.update_balance(balance – 500) some_function(connection) connection.commit()except e: connection.rollback() print connection.query_balance()
Example 2: Withdrawal
![Page 23: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/23.jpg)
try: connection.begin_transaction() balance = connection.query_balance() connection.update_balance(balance – 500) some_function(connection) connection.commit()except e: connection.rollback() print connection.query_balance()
Example 2: Withdrawal
= $1000
![Page 24: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/24.jpg)
try: connection.begin_transaction() balance = connection.query_balance() connection.update_balance(balance – 500) some_function(connection) connection.commit()except e: connection.rollback() print connection.query_balance()
Example 2: Withdrawal
= $1000= okay!
![Page 25: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/25.jpg)
try: connection.begin_transaction() balance = connection.query_balance() connection.update_balance(balance – 500) some_function(connection) connection.commit()except e: connection.rollback() print connection.query_balance()
Example 2: Withdrawal
= $1000= okay!Exception
![Page 26: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/26.jpg)
try: connection.begin_transaction() balance = connection.query_balance() connection.update_balance(balance – 500) some_function(connection) connection.commit()except e: connection.rollback() print connection.query_balance()
Example 2: Withdrawal
= $1000= okay!Exception
= $500
![Page 27: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/27.jpg)
try: connection.begin_transaction() balance = connection.query_balance() connection.update_balance(balance – 500) some_function(connection) connection.commit()except e: connection.rollback() print connection.query_balance()
💔
Example 2: Withdrawal
= $1000= okay!Exception
= $500
![Page 28: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/28.jpg)
try: connection.begin_transaction() balance = connection.query_balance() connection.update_balance(balance – 500) some_function(connection) connection.commit()except e: connection.rollback() print connection.query_balance()
💔
Example 2: Withdrawal
= $1000= okay!Exception
= $500
![Page 29: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/29.jpg)
💔#2: Implicit begin
some_function committed (my fault)DB automatically started new txn
![Page 30: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/30.jpg)
💔#2: Implicit begin
some_function committed (my fault)DB automatically started new txn
If you begin, you commit
Like memory in C/C++Nested transactions can helpDon’t implicitly start transactions
![Page 31: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/31.jpg)
Transactions: Use with care
• Communication with external systems
• Accidental long running transactions• Retry loops for concurrency errors
![Page 32: Trouble with transactions](https://reader036.fdocuments.us/reader036/viewer/2022062723/56813b55550346895da44537/html5/thumbnails/32.jpg)
Transactions: Use with care
• Communication with external systems• Accidental long running transactions• Retry loops for concurrency errors
Make it hard to use systems incorrectly
http://evanjones.ca/