In Addition to the Post of Jörg Stryk regarding the bottleneck “No. Series Line” I will present you another solution. Here is his mentioned problem:
Problem:
Technically the Table 309 „No. Series Line“ is pretty small and contains a fixed (more or less) number of records. Whenever a new number is drawn from No. Series, the corresponding record is locked, the last number is read and increased, then the record is updated. When updating the record the lines is locked (ROW X). In some cases this could also mean that the whole data page is also locked (PAG IX), which could lead to blocking issues. Means, for example, if a „No. Series“ is used (e.g. „S-INV+“) the line is locked (ROW X), also the page (PAG IX) blocking another process even when using a different „No. Series“ (e.g. „P-ORD“).
Solution:
If two processes try to lock exactly the same „No. Series Line“ (e.g. „S-INV+“) there’s nothing we could do. In other cases it could be feasible to use dedicated „No. Series Line“-Tables. In my solution I work with temporary „No. Series Line“-Table and RecordRef. We had to change Table 308 and 309, Codeunit 396 and Page 456 and of cause create one or more new „No. Series Line“-Table. Every Time the Codeunit or a user attempts to access or change data this will be redirected to the right „No. Series Line“-Table by using RecordRef and the temporary Table 309.