-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Running a statement results in different prepared statements #8870
Comments
Oh it is actually worse..
even if you do it like this it will still result in 24 (4!) prepared statements.
|
@janpio do you need any more info? We are running many thousand queries / minute at finanzcheck/smava and this is problematic for us. I'd be happy to help provide more data if needed. |
From my point of view, we render the statement in the order we get the values. And now I'm not talking about the JavaScript side or query engine, but the setup where we generate the query AST and then render the SQL. I'm thinking of some cases where this might be a problem, and one of them is how we utilize JSON in the upper layers. This is converted to a vector of Candidating this to the client team, but have you meanwhile tried to set |
Nope, all good - we are just a tad busy.
Do you indicate here @thomaschaaf that running the same query creates different prepared statements when it is run multiple times? In general I agree with you that we should try to minimize the number of prepared statements that are created. Sorting data of course has its own cost, so we will need to see if this "randomizing" is accidental in some way and can be "turned off" easily. (And just to make sure: Did you already lower the |
Reproduction: datasource db {
provider = "mysql"
url = "mysql://root:prisma@localhost:3306/prisma"
}
model A {
id Int @id @default(autoincrement())
a Int
b Int
c Int
d Int
e Int
f Int
g Int
h Int
i Int
j Int
} Directly communicating with the engine using GraphQL, create one item first: mutation {
createOneA(
data: { a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10 }
) {
id
a
b
c
d
e
f
g
h
i
j
}
} Then run a few updates with the id you got back, e.g. mutation {
updateOneA(
where: { id: 2 }
data: { a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10 }
) {
id
a
b
c
d
e
f
g
h
i
j
}
} I did two queries, resulting in two SQL statements that have the ordering wrong: UPDATE `prisma`.`A`
SET `a` = ?,
`f` = ?,
`h` = ?,
`j` = ?,
`i` = ?,
`c` = ?,
`e` = ?,
`b` = ?,
`g` = ?,
`d` = ?
WHERE `prisma`.`A`.`id` IN (?); and UPDATE `prisma`.`A`
SET `h` = ?,
`i` = ?,
`f` = ?,
`j` = ?,
`a` = ?,
`d` = ?,
`c` = ?,
`b` = ?,
`e` = ?,
`g` = ?
WHERE `prisma`.`A`.`id` IN (?) |
Position of the bug. |
Hey @thomaschaaf, as you can see above with the right information from you (thanks you! 💚) we could identify and fix the problem. This should be available in our next release on Sept 7th. I'll check if this already available in |
This should now be available via |
I'm sorry I left for the holidays but I will try to get me colleagues to test it. |
I'm 22 hours late, but CAREFUL now. We just removed preview feature flags for the next release, so if you didn't use Please read the feature docs or wait for the next version to get docs for updating. |
Bug description
I am experiencing reaching the
max_prepared_stmt_count
limit in MySQL. I have found the reason to be that prisma is creating a lot of prepared statements.We were getting information from the database and updating one field but were writing all data in the update statement. This is obviously not good and fixed on our side.
or
Interestingly the keys of the fetched object are not in the same order when getting them. This model has 17 fields resulting in
355.687.428.096.000 (17!)
possible ways the prepared statement could be created.How to reproduce
in MySQL look in performance_schema -> prepared_statements_instances and you will see two different prepared statements.
Expected behavior
I would expect that prisma normalizes this so that there is only one prepared statement. Reducing the number of prepared statements needed and thus not causing
max_prepared_stmt_count
errors.Prisma information
Environment & setup
Prisma Version
The text was updated successfully, but these errors were encountered: