The first major part of the "GC Work Reduction via Cold Storage" as announced in this thread: https://forum.playphoenix.online/viewtopic.php?f=2&t=10919 will come most likely on Tuesday, the update is currently in an internal testing stage. This will be the first really major technical update since launch and the first to include a noticeable (planned) downtime of about 20 - 45 minutes.
Positive user visible changes:
- faster restart times
- slightly lower GC pause durations
- poisons applied to weapons will persist through restarts
Potential negative changes:
- Logins right after a server restart might fail, in that case some changes will happen a bit later to resolve this
This update has the chance to cause some major issues which is why it'll be deployed Tuesday or Wednesday morning to limit the potential impact.
Technical details for those interested:
Up until this update we're storing item bonuses and item spells in separate tables from the items, each row in those tables represents a single bonus or spell respectively. This means there is an unlimited number of bonuses or spells theoretically possible to be added to items. This update adds fields for 14 bonuses (14 is the highest number of bonuses currently in use for a whooping 2 rogs) and 3 spells to the item table instead, those are then the new hard limits.
This update will then enable us to just load housing / repossession / bg loot chest items on startup and delay loading of account / character specific items to the login time. This delayed loading theoretically makes a ddos somewhat possible which is why after some monitoring some changes here may or may not happen depending on how much load it actually causes in production. It's possible that this extra load is underestimated to the point of actually causing issues under normal circumstances or over estimated to not be a practical ddos vector.
While we could have done the same loading without merging it into a single table, the resulting query and the way it's processed would have required a feature not supported by the underlying database driver (npgsql throws some errors when trying to use the binary copy of arrays that don't have a corresponding table) and changing it over to the conventional query method that would be supported results in practically no performance gain whatsoever. This merged table approach combined with the binary copy query variant reduces the load time from 1.5 minutes to 15 seconds on my dev machine when testing with a slightly older backup containing 9 million+ items all of which were loaded before, after the change only 400k items are loaded on restart.
Since the rvr stats are updated in place instead of recalculated on each reboot this item query is by a huge margin the major contributor to the long restart time (1.5 minutes of 2 minutes) hence a huge reduction in restart time is expected.
Poisons will be persisted after this update as changing / adding a spell to an item, like a poison, is then no more expensive than just reducing the condition of an item due to usage. Before it would have involved adding an entirely new row and later deleting a row while also adding some tracking headache.
Positive user visible changes:
- faster restart times
- slightly lower GC pause durations
- poisons applied to weapons will persist through restarts
Potential negative changes:
- Logins right after a server restart might fail, in that case some changes will happen a bit later to resolve this
This update has the chance to cause some major issues which is why it'll be deployed Tuesday or Wednesday morning to limit the potential impact.
Technical details for those interested:
Up until this update we're storing item bonuses and item spells in separate tables from the items, each row in those tables represents a single bonus or spell respectively. This means there is an unlimited number of bonuses or spells theoretically possible to be added to items. This update adds fields for 14 bonuses (14 is the highest number of bonuses currently in use for a whooping 2 rogs) and 3 spells to the item table instead, those are then the new hard limits.
This update will then enable us to just load housing / repossession / bg loot chest items on startup and delay loading of account / character specific items to the login time. This delayed loading theoretically makes a ddos somewhat possible which is why after some monitoring some changes here may or may not happen depending on how much load it actually causes in production. It's possible that this extra load is underestimated to the point of actually causing issues under normal circumstances or over estimated to not be a practical ddos vector.
While we could have done the same loading without merging it into a single table, the resulting query and the way it's processed would have required a feature not supported by the underlying database driver (npgsql throws some errors when trying to use the binary copy of arrays that don't have a corresponding table) and changing it over to the conventional query method that would be supported results in practically no performance gain whatsoever. This merged table approach combined with the binary copy query variant reduces the load time from 1.5 minutes to 15 seconds on my dev machine when testing with a slightly older backup containing 9 million+ items all of which were loaded before, after the change only 400k items are loaded on restart.
Since the rvr stats are updated in place instead of recalculated on each reboot this item query is by a huge margin the major contributor to the long restart time (1.5 minutes of 2 minutes) hence a huge reduction in restart time is expected.
Poisons will be persisted after this update as changing / adding a spell to an item, like a poison, is then no more expensive than just reducing the condition of an item due to usage. Before it would have involved adding an entirely new row and later deleting a row while also adding some tracking headache.