Thanks for reply. >Probably it's not time to do the code review yet, but when I glanced the patch, >I came up with one question. >0002 patch changes GenerateCSN() so that it generates CSN-related WAL records >(and inserts it into WAL buffers). Which means that new WAL record is generated >whenever CSN is assigned, e.g., in GetSnapshotData(). Is this WAL generation >really necessary for CSN? This is designed for crash recovery, here we record our most new lsn in wal so it will not use a history lsn after a restart. It will not write into wal every time, but with a gap which you can see CSNAddByNanosec() function.
>BTW, GenerateCSN() is called while holding ProcArrayLock. Also it inserts new >WAL record in WriteXidCsnXlogRec() while holding spinlock. Firstly this is not >acceptable because spinlocks are intended for *very* short-term locks. >Secondly, I don't think that WAL generation during ProcArrayLock is good >design because ProcArrayLock is likely to be bottleneck and its term should >be short for performance gain. Thanks for point out which may help me deeply, I will reconsider that. Regards, Highgo Software (Canada/China/Pakistan) URL : www.highgo.ca EMAIL: mailto:movead(dot)li(at)highgo(dot)ca