On the road to in-core logical replication!? Part 1: Architecture of Changeset Extraction

Video in TIB AV-Portal: On the road to in-core logical replication!? Part 1: Architecture of Changeset Extraction

Formal Metadata

On the road to in-core logical replication!? Part 1: Architecture of Changeset Extraction
Title of Series
Number of Parts
CC Attribution - NonCommercial - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this license.
Release Date
Production Place
Ottawa, Canada

Content Metadata

Subject Area
Logical Replication in the context of postgres to this date consists out of several independent out-of-core solutions. While some of these solutions are great, the existance of many of those also causes problems like code duplication, lack of trust, features, reliability and peformance. As part of a proposal to include one logical replication solution into core postgresql we submitted the changeset generation/extraction part as a core infrastructure to postgres. In a way its usable by all the existing replication solutions and for lots of other usecases. This talk is about: the architecture of the committed/proposed changeset generation mechanism (2/3) An overview over further proposed patches (9.4+) to get a whole logical replication into core postgres (1/3)
transition sources range scheme Heads Perspektive San option different core exceptions Systems ICONS Relation screen software developers Lasten sharing list transaction complete category patterns Sum of sort cycles Progress page slides file similar help events rules vision Floppy disk scale functions periodicity Crash specific encoding contrast structure form extension comparison default Standards DoT Net dilemmas volume lines statuts call timestamping frame Mathematical URLs Word Radius predicates function life build state time section Replicant management Mathematical strategy Datenerfassung extent Real random walk hot indication statistics several connections interface disk configurable rights board parametrization free recording mode CIS track functionality Implementierung Tabulated Resolution machines smart binary encodings train versions strings gamma continuous addition inherits consistency databases particle Los commitment Logic induction clones awareness unit fractions Biomedical Imaging Estimator single Relation errors Classes man blocking binary code effectiveness Coordinated drop bit Join Scanner trigonometrischen Funktionen sequence Positive mean Ordering point vacuum patches print Minimum serializability realtime audio mass value-added number product goodness Cache level architectures LUG zoom scale information key Resolution law content Commuting core basis dos Applications Limit environmental Case boom statements iterators Tabulated fingerprinting hard code ones set inserts parameter function ARM web memory Sync verification Logic information conversation Positive areas Headers format moment feedback Store fit types Data Mining norms results regexes recovery DEMs metadata second Subspace Ensemble testing integer modules serialization multi catalog including Invariants Computer animation carrier objects protocols
we can start considering OK I'm minus 1 and I'm talking about how we propose to implement the features necessary to to both logical implication on posters in a non and yet that's what approach so what we want to do 1st is a 4 to make it easier it is to get to provide an easy way to get the changes that are necessary to replicate the data in a logical way and logical here means that we have the troubles in a way that they mean something in contrast to when we do streaming replication on hot-standby posters that such as shipping bytes around nobody knows what so all change that section president does there's that 1 session per before with the sessions perform any form of you all day in there and they updated really potentially at some point they truncated relations and that those actions you want those actions and stream them some of the node and do something on that of the nodes whatever that is going to and their so use cases the primary 1 which is why I am mostly doing this is that we want to build a reputation solution around it but there are also quite a bit of use cases on auditing because it's in the wall but not in the lower right-hand lock which is Postgres consistency method and it's not a persistent agent in the normal relations so that doesn't necessarily need to not In the year that you need to know for now is and it seems to provide everything the basis and then there are obvious of use cases like you want to replicates 10 different databases into 1 and where you want to process that stream and analyze patterns and it's you want to do integrated into uh some caching proxy and invalidate the pages that are relevant there are quite many states so the high level architecture we chose to do this is that you know if a novel post goes back and that's just as normally writes about right hand which is what those diseases for crash safety and for the stream replication and that's all there and then we call the so called occupied and that gets the data from the right lock and former it's it in the way you want it for Europe this use case so if you want to replace the part of both sides so you produce SQL good that's if you want to do it for a new style you would provide some area of the columns and they're quite or if you want to do that out another application solution you might want to send the travels in a binary format because the text conversion inefficient their consonants and then you those off plants are easy to write and I'll show how that and then you actually want to get the changes so for some use cases especially for dividing and development very useful to get the changes as a table in scale so we have set training function that just gives you OK give me all changes since the last time I called this function can then gives you a table like stream of those changes or you can do is we also know that we use for a string of location and say 0 I want logical data itself is that it would give you that and that has the advantage that it can actually screen particles so you never have to have more than 1 topple in memory at the same time so how do we work with a lot of attention there's 3 I steps to to manage all that the 1st is to say OK I want to do what the replication and if you use a on the skill level and say it logical replication comparative so them or you can do it on the loss and a level and then the different commands and the most used then will be based on logical application which then just starts being of changes the use the a skill level will give you all the channels of now if you use the streaming formats will just stream changes until he sent a letter thing and if you're if you're really applica down and you remove it you can say OK I don't know the name of so if we unfortunately that went to 1 I thought that so on a skill level you can do so that star from the logical implication if that's replication screen name and give it an upper body and that all money will be responsible for formatting the output and then it tells you OK I created a lot of that name and it starts at the Catholic position because we base it on the right hand lot and that's just the position from where we can stream data on so let's see how we can get that changes so let's suppose after we have done the replication we do create table and insert 2 rows 1 row containing a 1 and a containing 5 and then we can do so that star from start logical implication sort name ones and we say OK we want all the changes up to now or just say give me that all the changes up to some of us and we don't want to get too many maintain that once and then I will give you the data so we have the 1st induction from here which is the great table create table doesn't in the in the data itself so it's a transaction that can give it to begin and the data and the next 1 is a kind of the beginning and end 2 rows and can so was a lot of you have a no we can do that but it's very hard to do anything sensible note so we don't do GDL application areas that so 1 person years who has worked on the web and there's another 1 has worked on it a bit differently and I think we are under way to get there but rather than data of the of source of the of of the there will at some point we will have the events trigger thing and that will allow you to replicate the details of this we'll just very and presenting what we actually have this I think that's already useful for quite some things because normally you will do the create table and create table and then you will have a crater 1 moments or it's you do the create ends at the creative Institute table that will then be replicated because small in certain benefits that replica uh exceeded all that yes and you at all replicates the scale taken for doing that but it it works out yet and so you want to see the all don't predicate DL itself now and all it is that it will not replicate the data and how it is on this so it will be can actually have a default value filled out so this is a um so is that and now suppose we do and arts and then we drop the table which is actually interesting case but we can see here if we do this topological replication again and it will now stream data even though the table isn't there anymore present you'll see that later why that is not that is so as you can see the work of that see is that an hour passed a parameter to the function here hybrid cities which if you compare the statement for the text contained in the XRD now doesn't anymore and that's just a generic way past information that our images to offer plants so but not now remove the node again because it and and so the same thing can be done in a streaming fashion using the replication protocols and that's just a 2 for that is at the moment you receive a law which is possibly not his main yeah so you tell it which in the past to connect to which lasts 2 years and where to write it out as to stand out here and then you say 0 in here and we start streaming and then it starts streaming data a can see in this case we updated the primary key and the primary key was the idea 1 and then the new 1 is minus 1 so it gives you the data he was on the so here that if the when you created this we have defined the name and suppose we have we several notes to replicate all those will have a different state up to where the indicator so we need to keep track which data do we need to retain the primary to be able to stream from that specific position yeah yeah it's expected handle which is crest and which is consistent across restorative post and everything so we define and that ensures that have enough information to the data from their own and also has information like in which which database are a correct meaning which up but in our using because this check the that we only defined the uploaded here the test is coming up but in on the in we don't do that on the style of the case which you will times that because those that often can change parametres of what we have so as long as that's what you see is that like about a lot of relevant of that is what I want to do it it's not going to have but the work that we have that that in a shared memory segments of characters from and I just want to do the same for physical get so again so I referred frequently to offer violence and that's what's people who will implement uh implementing in Europe constitution will have to write because they want to have their own of performance so currently you have to compile a shared object and that such an object has to define 5 collects and they're pretty straightforward from this mission if 1 is called like that just says OK OK memory those other parametres past EU you're working on the database and what you want to do and then whenever you somebody calls that when convection streamed out the begin of transaction streamed out beginning transactions and chance comes in change commits and the other just a the replication scheme goes down so here's the example call back from that for mentions of test of the pudding so it gets past context it gets passed the information of all the transactions and you get past the information we're committed so the 2 some folding and then we do the important part is we say OK what made wants to write out the data and say OK get enough data to schema changes then we can patch check some options which you earlier past but they want to write at cities or not and then you can just use the things inference the infrastructure for biting out there that can write a data binary data as well just need to use a different string for function so in 1 case right commits with the XRD anyone not obviously that's you can also write out the time and similar things and then if we're really interested interesting you can write out it as for Fourier and that will then go out and buy the data necessary for either the scale function to receive a or a form center receive it or if somebody wanted to implement another method of receiving those changes you to find so the problem more interesting cases where we have to have a change so in similar thing to get the context the transaction we get also now noun the relation in which the changes performed and we get information about the change so again we do the trick with properites which is of the NASA sorry and then we do have a switch which says OK which actually was that changed during Evan insert River update or delete those are all the cases that have 1 the yes enough kind of like the you know the goes internal go ahead you just throw an error that will take chat boards and you just use the normal post-stressed code for error handling this is the result of FIL that you would say that you want to implement new applications solution or you want to do all that in a specific format nobody has written the things for you from that you would provide these 3 at these collect so are you just use of off money which somebody else already exist 1 and 2 it already but this might not see the need because you look back the format here is really useful for anything except demonstration because I don't think you can easily parts that and use it for anything so you Fourier some of solution you want to do take scale there whatever so yeah so and in for example what you can do in those and didn't and there it is there's a good insert then just write protect insert and then convert the top will we get we get normal topples how it's used in PostgreSQL so we can call with all positive functions like that won't tell to many of you this artifact and functions we can you can do anything so I wrote a function converted toppled string info because there there's some of the things involved that are interesting when will scare most of you way so if determine that yeah that rules standard for metadata so know that the only way to handle and only at the moment you get all comes past except that unchanged just come because they are not because we can't we could pass them as well that it would include increased the right volume and we don't need it at the moment we can make an option of all but on both sides actually so and there's another problem if you can initiate a replication stream like we did here uh that you all the changes from that position onwards but how do you create a 2nd database that has all the contents of that up to that point because he is needed in all the down you don't have necessarily consistent thing because the sentence makes the earlier limits that later so would you do if you start to be in a logical application on the lower level is that you only with encode it connects to the database say carrier connected by replication particle and you the image of the case then it would give you a day from where are we starting but we also give you a snapshot name so in a separate session you can do in in transaction and then you can do such and such a snapshot that's not such and from that point on you see exactly the states you had from where after which you would get all the changes from my thoughts so the initial weights for a point in time where you are what where it's possible to steam all changes and for and here is the head of parameter estimation method for down because actually Stream changes from that point onwards or you can just start copy or and you can do the same thing in multiple back and so you can start at 10 seconds although copy of the relations defined and then you can load among the oversight and afterward you can do it start logical reputation from a slot and will stream all the necessary changes the so now that's worked from the actual perspective of some implementing a reputation solution is interesting so if somebody has questions from what that all is useful for the but this well it's it's that this if you do the ideological reputation as soon as he sent the next command over that of replication connection or if you and verification connection you can't work because the radius portals snapshots were composed it is resource connection transaction session whatever needs to be alive so you need to weights tell you that this to and their center next or is means no you would you mean you how do you use in that session the Saturday that independent as soon as it started as independent from the source and that's actually important from and just normal begins at MIT this so it's sort a file but it's all act to you don't know anything about it not sure I can for of want In the case of knowing that they it is if you start a lot of replication it will give you the name for that and then you can start to modify the stem or whatever code you want to do to copy the database on that you don't need I'm not sure what you mean by querying the database and that was something that do that know the point is that when you start publication in needs to find a point in time when it has enough information to call the code changes from that point onwards they can start at every location because we why that is well explained in the following slide but you need to wait for that specific point work for those of points so you need to 1st start the application and then there is you always have to be the meaning of the source of the can range of this range somewhere out there may be this is this is it's how start getting sick and who will tell you from where are it can decode the changes and since that is a point you can influence the provide a snapshot to get information about what was the point at the moment of search and at the moment does so you need is a bit more intelligence needed to do that it yeah there in 1 of the fact that the 2nd so it didn't work at the end of right as something like that but it's just it's too much coordination and I think we need to start so so yet but you need to coordinate with the start of the year and then you need to make sure that the main recover you find is after that part after that accident so there is some indication what have we got have heard the union of that the discussion we have remained of so the idea is that you need to know I didn't do that or just you'll get an error if you do and then you can really try so or it just looks lock the before and where it is you want to do it really fancy you can do that in the indeed it's called like you do like insulin event-trigger preventing the if you really wanted as far as I know a lot of different people will be doing right of the areas that the random walk on the wild the wild and I think you just need to Solomon's rigor originally you you just look at it fast and stuff they work because it's a giant left to that it obviously has some disadvantages because of that him from working set like that which which might not be what you want to but it works and yet I think in doing the uh ETL involuntary preventing any changes or just acquiring lot beforehand for those of you that you the quality of people because the parental traits Table of really good at the final time here no really you yeah creates timetable blocks which might surprise some users I yet I think we will introduce some women flexible there so I think that's the right to go to the and it's possible that text the main thing you have to do any of that is going on yet but you can't do that after you quite a lot of eventually out so it it's just yet but that some knowledge the flame parts might and some few people that there so I would do it right and what records look like them as real you will notice for a simple case where we have a single insert flight OK at a specific position in the right had a lot of this is the allison and yet in the right logical sequence number which is basically an offset the file and we have a transaction number and we know OK it's about it being manipulated and in the it to a specific relation and a specific point in that relation and then after that follows data and the data that follows is basically nearly the same we store in the novel tail so after fiddling of it it looks exactly the same as if you were use a sequential scan or heat scan some form of it by an next or anomaly just like that the so there are some problems when you want to do it all at decoding from what right have because it's not really are easily made to the police or the change because it just for recovery so 1 of the interesting cases like start several transactions the same time then we create a set S is a point 1 transaction we insert in the EU and once and action a record another at another session then we say OK that's a safe point is committed in the another rows and I commit both transaction the way that will look in the rat in the right half of OK Introduction 704 restarted and we did in in the mountains transaction 7 and 5 who that's a print and actually get only a separate set point but the way it works that actually is a conductor looks like it and so then then we see another 1 over for but when you and then we step so we have now here the yeah for practical 1 sorry so you know see is a from here with but you know all right at so we see the 1st image which is the best to commit here then we see of as the use of free will and which end if look at it there it tells you OK we have a source of transactions and concept election that's an reason for that's the 1st point where you know OK that at 38 resolving earlier belongs to the top of the transaction so now you need to make sure that you can get all those together in some sense way there's also another problem you might have at this point you might have been collected so about you have you might have a role what's here so and if the transitional back don't want to think about those changes because there was a leader the In this weekend but that's so what you do is we basically reassemble transactions to being a license to full transactions so what we do that by 1st insights that and if he he collects all those things from the 1st time we see an accident to leave see commit record going back to the store those in memory or on this collect them and then when we see committed approach like you're in OK we have the at all rose from 7 to to read out but we also have the ones from the 4 so what you do is we do much between all those different transactions between in memory on this and since they are all as an ordered we just don't need to presort then we can just walk through them using a binary the merge and 11 and when very change we see the call called committee and we call that familiar with very goal the 1st when you start with the 2 that a collagen transactions Missy changed from the change was called change and then in the end it so all all of this is that because we cannot easily be sure that all the data and there's this and we can think it's easier if the role that will be in the right hand so you might see if done parole like you'd see a transaction and that it would say OK here's the is a role and then we so always 0 but throw away all the changes we accumulated from that transaction and continue in the exact so the occupying because you can actually call up guidance for the Boston Directions why sex this so we just following that that exactly all the of way people over having you can only get changes from 1 iteration so you need because we need to look at your expense as the Christian providing we have a long way and then you it will be of changes when using the committee yes you get the changes the income it which is a useful property which is the order uh replication solutions like slowly try to get and use a hack to not get carefully studied a very useful property for replication there are other interesting orderings you might ask him and Ruud knew about that and I know what you will be able to follow and what it but they are loadings but that's what be you know which is sufficient for most of the errors because providing the actual serializability across multiple nodes V is what I have to know he said earlier that you don't want to it doesn't want to that that so so called that yes you don't even get me all of modern call it so we actually it's not that hard to add a streaming mode where we use the amount changes and then you get this could get a goal but also to up that that you turns out to be very annoying the value of having vision of something to say about the rest of the world and you want to say paralyzed period possible actions like this 1st of those areas of so it's possible it's just that you're repetitions in this needs to get more complicated because somebody needs to deal with with several transaction peril but because it seems also important for so things like if you have a a very huge transaction and using that everyone's might tackle so at some point we might want to say like OK the transactions bigger than 5 thousand things already accumulated but switched to stream tell the upper in this that's been transaction is it enabled the feature and that's being bad base somewhere changes needed for that because and untrue who is interested in that you currently Saskatchewan needs to make the sisters were correctly are only locked commits on that my earlier and we need actually are so if that is enabled we need to make some interesting things like to all of stock each material that will 1 thing that's but the electoral but I will get rolled back on the new node anyway we started to look 1st at the plant and it start any transaction that is in progress will be microscope so there's no you can't unless you count prepare transactions you can't have 0 yeah I believe me you have there's no problem in supporting the in the and if you want to do that I in case of so why are there is this all not that easy so we if do have a critical then we do in search and then we can also table and then we do in in another is since we're becoming all that synchronously is when we decode the data for that and the at the we need to know how the table looks like to decode it back to the review that data you don't know anything about the contents of justice OK so that many columns does know which type becomes half a dozen of known about anything like name just lost whites so you need to know the table definition to do that decoding so if we decode here if we are in this point of time the decoding there we would try to decode the 1 and look at the table we see OK it's type text and try to decode 1 as the text data which will call sex because it will be as it was pointed the other 1 now another really so that small bites so what you do is the solution for that is because while we go through that stream of changes we have a snapshot of the catalog that that looks like they're uh when we decode this 1 here it looks like the table definition is given a an integer and non-integer when we decode the next research looks like all we have a text and an integer so it really provides to look at the statute that looks like the catalog at that point in time you use the yearly that were you know was held at the end of the next the wrote is 1 that are if you are able to provide get it something useful out of that shorter of the problem is there might be multiple alters involved in between and then you don't see that anymore so you need to make comparison every time this city note every single in there there is that difference you have made all can also simply saying considered somebody during and after the also tables in out of and in the middle 1 might be 1 2 so we use unit for example also table using will you won't be able to detect that in the past so this wasn't a with catalog differences is really dangerous and maybe so how do we build that Snapchat continuously the 1 inch 1 interesting properties we only need does not have to be able to look at how we won't be able to look at the moment the normal user tables because they are not necessary for decoding there's some cases from like to mention that for now you would need some special things say in this table is also a catalog table and then you'll be decodable he doesn't like that that's what I can give so when we read the right outlook and we do the in into the logical replication so we establish a logical location slot which is the name that we read all right and like to we see either shut down checkpoints or we see an x running accents record record which as is both for a parts and and has information of all the transactions are running in the room around with those informations we can actually build a snapshot that sufficient for decoding and looking at the catalog that we can only do that after all the transactions that are mentioned in there have been fit have finished so we weights to all the cities have committed or aborted and then at that point and we don't want to do it all the time so every time you roll it you right that's not just because it's someone hot standby of the problem that if you shut down and then when I started up you might wait need to wait 3 minutes till you can access it again if there's a high amount of right traffic on the primary which is really good if if you cannot see intermediate changes for replication because we had probably replication solution which skipped can insert every now and then might not be so useful so do is we save the snapshot every now and then this the points are aligned with specific things in the right block every time we see checkpoint record every time you see a at running xx record we save the prisoner disk which is mostly like up about so and when we remember when the last time we decoded the bit that was and so he's just start reading from the last time locked go from there so I guess that's how that works on the very very high level and actually the twofold thousand 500 French in the file which has quite publications that's the most complex part so this is what we have for a change that extraction itself but since we actually want to build with another application there are some more features we have in various stages of completion so for conflict resolution when you want to implement a lot of the weights strategy is very useful to know when did uh specific actually commit so we have the Commission timestamp module which enables so fellow commute time constant when it's enabled we can do that action and then when can they said that transition transaction commit times 6 9 5 and then it will give you the chance that all crash safety is not very useful for us and it's I think I've seen others asking for that kind of thing also use it it's really elaborate wrote the code for that in truck so it's just not very hard then the next thing we have is never structure built on top of sequences because image must and uh environment using plain sequences is not that easy to use because you need to the idea that conflicts and every answer which is not very nice or you have to solve like managing the increment on every node individually and saying OK you aligning the stock values so you never get contact between nodes but that sex if idiot new nodes so the very nice so what do you want to do is provide another way sequences work for and things at the moment sequences are quite hard coded in post because we added the section for sequences sequence and so just like we have different units access methods now of sequence x methods so you create extension art which is bi-directional replication which is multi-master thing and say OK createSequenceFlow using the R so specifies which solution you want to use it uses otherwise it gets uses the final limitation then metallic and has options to like OK if you want sequences that quarter of thousand Eddie's for every node and when those phones are used up its new ones but that's just argumentation can do lots of things you can do you can implement gapless sequence if you really want to I don't but some people seem to want to yeah so the moment there are no transactional so if you need when need them because say OK create sequence using kind gapless sequence and then it would obviously be involved more walking but you could do it both this pleasant it's understood Moscow school or life of a so and what do want to do is master with conflict resolution implementation that's why we are funded to work on the health effects that except the so when you're building is logical replication we want a synchronous multi-master because or use cases globally distributed nodes and doing synchronous global only distributed to master here something else I my life is hard so and for now we implement another between strategy because that's good enough for us but I'm at the next thing would be to allow all this is a complicated list we call in every conflict and then make sure we have consistent state lock the after the after image and make sure the result way of all nodes so rigid is yeah what of the of the the of the of the will of the sum of all the way to do that for you yeah is it possible to get that all University of yes you need 2 sets of slack to do that so because it involves more data being collected but yes this is what well I I think we it's possible that we can get the change of fraction in the next release there are some people interested in that I think we might be able to get the sequence stuff in possibly even the air commits timestamp there's some problems or environmental problematic but every the rest of the multi massive thing doesn't actually needs to modify any core genes in the way we have now so we just distributed as an independent so for now and when it's seems apparent that that so yeah so we just have like are all machines that do the invariant the block and a low level and about the same as in a normal but you need to have no you can't do that because it's just not you can't have more than 1 year would come you can't have more than the 1 gigabyte column at the moment and that needs fit into memory so if we have 10 of those yeah for for housing has only it's once so you might have to better have also been no posters what you want to do you really well so and the code there's some areas of the code which I just up something I want to use actually not so there will be some months to use the that production also you at the moment it depends on patches and of PostgreSQL that I'm caught so you need to run text posed as and amateur you want to get a product so that yes what would you think about what is going on you and to say something about the time frame were passed on and you can still be tolerated and have a for 1 year but for flies this time we find that the use of the class we hope that you change really underdeveloped in meeting yesterday and we hope that we can get a patch ready various properly very early on because it is getting committed a in at the end of mine F releases and can be problematic and and involved in emotion to agree that I'm comfortable so it won't get into 9 wasn't ready at all 4 9 3 and I hate that it isn't in 9 but is there a lot of the the what we have it yet the summary of all yes so for example I had the 1st draft of that prevented that he must be the count and since then I don't think too many lines of that code remain I think most instruments that no they change it note that that's what they're not you you can do that because he and you probably want to do that for many use cases but you get past the relation which contains the relation name again intend do any additional diskette lookups catalog dots and if you did very year configuration tables as time entitle will have in those that can declare uh titles are land-use there as the Sony as OK I can look at that in the upper part in any C k at that point of time we did decide to shape that and or not a lot of looking at this time it's only if it's only for catalog tables or to care as being at yes we are about 3 times faster than that land at that DQ and when the suggestion of change I I I didn't do the other comparison so far and yes so in cases where the performance gap is you have like 1 time some come and you do binary outputs in the upper 1 and it's like 15 times just because the upper part of functions for times a rate and if you like post is the same as soon as you go to the scheme of binary changes gets much us of it is it is it was yes half depends a bit about at 1st it was in fact quite a bit but at the moment like 3 to 5 when you have 1 axis and their increase in the amount of data in the right hand but during the D. runs like this 6 you have to be on the meaning of the word you you know what it is that we have in this case what like this how you do need to do that because otherwise you can cover call all the actions and because for example if a call record of what you know what it does it does assistants especially so there is no way to do it without suspect that were noted that some will be like except for every time you're in a changing get past the fact that the this consists in which 1 would that what would have been you know like when you great except that those at creation time are actual nationality so you have possibly inconsistent and this is the then about current point 5 but but we can have that kind so like this is also doing you know there and engines and there a complete them on the floor of the yes that was 1 of the very hard requirements for members people that that the whole thing that you need to see the holes in my wall clutter and yet I agree totally have today and I am very happy and just wasn't headed by that but the minister of being told what to do with rock so any other questions this is correct and that is each of these wall while this this a system you it can say OK which a lot of application floats haven't been been for a long time and you need to include that in your monitoring said just like you do need to do the same for the 1st a thing that because using a hot standby feedback or you you need to do to monitor a long-running transactions you need to monitor prepared transactions all that no it uses the normal catalog and because we have a Missy database we don't need the the data be prevents vacuum from moving those those on the cattle today monomorphism that because tails so we can solve all of you have your whole life yes yes for example if you like a massive creates temporary table layout that is going to be noticeable I hope you can get change that extraction help we can have a chance for getting in the commute time stamped and the sequences because those are the parts that any of those solutions will need to work without being tied the core release cycle because at the moment all that is moving too fast for core members in so those are the ones I want you to get in there some smaller picking patches that are appropriate to discuss it at the because using this because you know little and use then view the only 1 very often I'll say that really just leave so 1 would think they're quite make it left thank for so many things all mentioned and to all people I did mention because I didn't feel like discussed at various foods so under e-mails I think it's way over a thousand fold so and by now Peter isn't that important anymore but still you has helped and the possible for this that definitely deserves mention mention that yet to