Refactors dbcore and limits the maximum amount of concurrent async queries to a variable amount (#59676)

Refactors dbcore to work off a subsystem if executed async and limits the maximum amount of concurrent async queries to 25.

This has been tested locally on a mysql docker image and there were no crashes (as long as you didn't run it with debug extools) + data was getting recorded fine.
Why It's Good For The Game

May or may not resolve terry crashes, however, each query creates a new thread which takes up 2mb, preventing the game from using that 2mb. This can lead to ooms if they stack up, e.g. due to poor connectivity. This solves that issue.

maintainer note: this did not actually resolve the crashes, but has value anyway. Crashes were sidestepped fixed by finding out Large Address Awareness works


cl
refactor: Refactors dbcore.dm to possibly resolve the crashes that happen on Terry.
/cl
This commit is contained in:
Watermelon914
2021-06-22 09:33:42 +12:00
committed by GitHub
parent 5d44d536e2
commit f7117797d4
9 changed files with 239 additions and 35 deletions
+18
View File
@@ -702,6 +702,24 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
else
to_chat(src, span_warning("Failed to place [template.name]."), confidential = TRUE)
/client/proc/run_empty_query(val as num)
set category = "Debug"
set name = "Run empty query"
set desc = "Amount of queries to run"
var/list/queries = list()
for(var/i in 1 to val)
var/datum/db_query/query = SSdbcore.NewQuery("NULL")
INVOKE_ASYNC(query, /datum/db_query.proc/Execute)
queries += query
for(var/datum/db_query/query as anything in queries)
query.sync()
qdel(query)
queries.Cut()
message_admins("[key_name_admin(src)] ran [val] empty queries.")
/client/proc/clear_dynamic_transit()
set category = "Debug"
set name = "Clear Dynamic Turf Reservations"