I have a case, where I should limit rows per user in the table. Now I am doing this via COUNT * FROM table check before insert, and if the count equals/more than allowed, I throw an error. COUNT and INSERT query running in the single transaction.
But, on 5000 online users and 50K requests per minute, I have extra records (more than limit) in the table. Looks like a race condition on parallel inserts. How can I avoid this? Can anyone suggest some best practices?
Concurrent inserts and race condition in MySQL
1.9k views Asked by LONGMAN At
2
There are 2 answers
0
mroman
On
The issue is called Phantom read. Typically it can be resolved by using Serializable isolation level of transaction:
https://en.wikipedia.org/wiki/Isolation_(database_systems)
But it can decrease performance. So if you have a lot of inserts than try other options from comments too.
Related Questions in MYSQL
- How to Retrieve Data from an MySQL Database and Display it in a GUI?
- How to change woocomerce or full wordpress currency with value from USD to AUD
- window.location.href redirects but is causing problems on the webpage
- Error: local variable 'bramka' referenced before assignment
- Products aren't displayed after fetching data from mysql db (node.js & express)
- status table for all entries (even in different dates) in database changing value when all checkboxes are checked
- Can't Fix Mariadb & Mysql ERROR 2002 (HY000): Can't connect to local server through socket '/tmp/mysql.sock' (2) On MacOs
- Express Mysql getting max ID from table not working cought in a promise
- failed to upload a table from sql file
- Update a MySQL row depending on the ID in Google Sheets Apps Script
- Use row values from another table to select them as columns and establish relations between them (pivot table)
- SQL: Generate combination table based on source and destination column from same table
- How to display the column names which have only unique non-null values in MySQL table?
- mysql query takes too long because of wrong indexes usage
- Multitable joining in Sql
Related Questions in CONCURRENCY
- Unexpected inter-thread happens-before relationships from relaxed memory ordering
- Multiple Processes, Multiple Processors, Single Priority Queue - Java Thread-Safe and Concurrency -
- Efficiently processing many small elements of a collection concurrently in Java
- Zig Concurrency Vs Erlang Concurrency, is Zig less efficient than Erlang?
- Two Update statements on a row are running simultaneously with no locking in MYSQL
- How to Identify Specific Transaction Anomalies in a Given Schedule?
- How can I improve concurrent message processing with Google Task Queue?
- Why does the following program printf "thread 1 exists" twice in WSL2?
- ModelState.IsValid is false when its Data Model Concurrency Token is non nullable
- .NET A second operation was started on this context instance before a previous operation completed
- Can someone tell me what's wrong with mi Task.await?
- I am a beginner. More than problems, I have ideas I share my code ;D. NO RULES
- Understanding Potential Deadlock in Resource Pool Implementation Described in "Go in Action"
- Why are pre-allocated stacks expensive, given 64-bit virtual memory?
- Concurrency issues with server-sent events in Python
Related Questions in INSERT
- NEXTJS14 DRIZZLE : Async issue when trying to post data from component into DB
- Error adding data to mysql with javascript and php
- unshift vs assigning the values with loop vs manually assigning values by hand. Which one is faster?
- Save PDF file to sub folder based on a cell value
- Can I Insert Entire Typed Object Into Table With SQL, Without Specifying Each Column?
- T-SQL to merge data from different rows under different columns
- Data type mismatch in criteria expression for decimal with OleDbCommand
- Prepared Statement don't work and don't send error message in C++ with MySQL Connector 8 C
- How to add a separator between English and Arabic Text in a cell
- Sort a column automatically when an entry is added/deleted and directly create/delete a related row
- Using script to add new row below current row when cell in A is changed causes a row lower down to be deleted
- insert JSON into mysql json column
- Cannot use WHERE variable in where clause for Insert stored procedure
- BigQuery - Transaction rows double when Insert Into and Left Outer Join statement used
- Ansible lineinfile - add substring only if missing
Related Questions in RACE-CONDITION
- Crash video on SimpleVideoExoPlayer
- Can a data race occur when multiple threads access the same Numpy array?
- Intermittent Incorrect SSR Redirects (request and response mismatch in server.ts level)
- How to prevent Race Condition on SQL Server?
- Why is this giving me an IllegalMonitorStateException when all I'm doing is locking and then awaiting a condition?
- Handling Concurrency, Overflow, and Periodic Draining in a Rust HashMap Collection
- Can transaction.on_commit() be used to
- mkdir()/chmod() TOCTOU race condition under gcc linux
- The Philosophers dinning problem, why my threads are getting race conditions?
- Updating same MongoDB document from two different sources while avoiding race conditions
- Encountering Race Conditions Despite Using Django's Atomic Transactions and select_for_update
- postgresql concurrent write on the same row
- Most efficient way to signal consumer thread from multiple producer threads using condition variables
- Promise.race not working on custom function
- NodeJS socketio race conditions
Related Questions in HIGH-LOAD
- Is react-native javascript runner that slow?
- High load: real-time get SQL message and send it to the Kafka broker. What architectural pattern is suitable here?
- How to select rows only from n first rows by condition in mysql
- High-load C++ logging
- When I am use 'order by Id DESC', query execution time increases more 25 seconds
- Understanding SQL connection pool work with Go
- Pgbouncer how to test usefullness using query
- MySQL high load errors
- Limits for Telegram bot
- django.db.utils.OperationalError: could not translate host name "db" to address: Temporary failure in name resolution on highload
- What are the maximum limits for open files and running processes in CentOS 7?
- FastAPI + Uvicorn config. Why do some of requests take more than 10 seconds?
- Golang http client - connectex: Only one usage of each socket address (protocol/network address/port) is normally permitted
- HAProxy reverse ssl termination: Memory keeps growing. Memory leak?
- Which is more faster? trim() or RegEx?
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Use a separate table which will maintain the user and the count of rows inserted. Use the userid as foreign key to the main table. Now if you have a session based application you can load the data into the session or memory and keep fetching it / updating the count after every insert in the session / memory and the database and then actually inserting into the main table.