<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 8 December 2016 at 12:16, Roy Golan <span dir="ltr">&lt;<a href="mailto:rgolan@redhat.com" target="_blank">rgolan@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On 8 December 2016 at 10:06, Yedidyah Bar David <span dir="ltr">&lt;<a href="mailto:didi@redhat.com" target="_blank">didi@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_-1908282014880511197HOEnZb"><div class="m_-1908282014880511197h5">On Wed, Dec 7, 2016 at 10:56 PM, Eldad Marciano &lt;<a href="mailto:emarcian@redhat.com" target="_blank">emarcian@redhat.com</a>&gt; wrote:<br>
&gt; just forgot to mention that no customization required just plug &amp; play he<br>
&gt; will collect a large set of informative data by deafult<br>
&gt;<br>
&gt; On Wed, Dec 7, 2016 at 10:54 PM, Eldad Marciano &lt;<a href="mailto:emarcian@redhat.com" target="_blank">emarcian@redhat.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; In terms of measuring I used pgclu couple of times and it powerfull,easy<br>
&gt;&gt; to use, and provide very nice HTML reports<br>
&gt;&gt; <a href="http://pgcluu.darold.net/" rel="noreferrer" target="_blank">http://pgcluu.darold.net/</a><br>
&gt;&gt;<br>
&gt;&gt; And also provide autovacum analysis<br>
&gt;&gt; <a href="http://pgcluu.darold.net/example/dolibarr-table-vacuums-analyzes.html" rel="noreferrer" target="_blank">http://pgcluu.darold.net/examp<wbr>le/dolibarr-table-vacuums-<wbr>analyzes.html</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Dec 7, 2016 at 9:55 PM, Roy Golan &lt;<a href="mailto:rgolan@redhat.com" target="_blank">rgolan@redhat.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On 7 December 2016 at 21:44, Roy Golan &lt;<a href="mailto:rgolan@redhat.com" target="_blank">rgolan@redhat.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On 7 December 2016 at 21:00, Michal Skrivanek &lt;<a href="mailto:mskrivan@redhat.com" target="_blank">mskrivan@redhat.com</a>&gt;<br>
&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; On 07 Dec 2016, at 11:28, Yaniv Kaul &lt;<a href="mailto:ykaul@redhat.com" target="_blank">ykaul@redhat.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; On Wed, Dec 7, 2016 at 10:57 AM, Roy Golan &lt;<a href="mailto:rgolan@redhat.com" target="_blank">rgolan@redhat.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Hi all,<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; This is a discussion on the RFE[1] to provide a tool to perform full<br>
&gt;&gt;&gt;&gt;&gt;&gt; vacuum on our DBs.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; First if you are not familiar with vacuum please read this [2]<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; # Backgroud<br>
&gt;&gt;&gt;&gt;&gt;&gt; ovirt &#39;engine&#39; DB have several busy table with 2 differnt usage<br>
&gt;&gt;&gt;&gt;&gt;&gt; patten. One is audit_log and the others are the &#39;v*_statistics&#39; tables and<br>
&gt;&gt;&gt;&gt;&gt;&gt; the difference between them is mostly inserts vs mostly hot updates.<br>
&gt;&gt;&gt;&gt;&gt;&gt; Tables with tons of updates creates garbage or &#39;dead&#39; records that<br>
&gt;&gt;&gt;&gt;&gt;&gt; should be removed, and for this postgres have the aforementioned autovacuum<br>
&gt;&gt;&gt;&gt;&gt;&gt; cleaner. It will make the db reuse its already allocated space to perform<br>
&gt;&gt;&gt;&gt;&gt;&gt; future updates/inserts and so on.<br>
&gt;&gt;&gt;&gt;&gt;&gt; Autovacuum is essential for a db to function optimally and tweaking it<br>
&gt;&gt;&gt;&gt;&gt;&gt; is out of the scope of the feature.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Full vacuum is designed to reclaim the disk space and reset the table<br>
&gt;&gt;&gt;&gt;&gt;&gt; statistics. It is a heavy maintenance task, it takes an exclusive lock on<br>
&gt;&gt;&gt;&gt;&gt;&gt; the table and may take seconds to minutes. In some situations it is<br>
&gt;&gt;&gt;&gt;&gt;&gt; effectively a downtime due to the long table lock and should not be running<br>
&gt;&gt;&gt;&gt;&gt;&gt; when the engine is running.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; So, effectively this should be interesting mostly/only for the audit<br>
&gt;&gt;&gt;&gt;&gt; log. All other busy table are mostly in-place updates<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Given that autovacuum is performing well the yes but if it starts to<br>
&gt;&gt;&gt;&gt; fall behind this may help a bit.<br>
&gt;&gt;&gt;&gt; audit_log is insert mostly and also delete, we remove a day, each day.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; # Critiria<br>
&gt;&gt;&gt;&gt;&gt;&gt; Provide a way to reclaim disk space claimed by the garbage created<br>
&gt;&gt;&gt;&gt;&gt;&gt; over time by the engine db and dwh.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; # Usage<br>
&gt;&gt;&gt;&gt;&gt;&gt; Either use it as part of the upgrade procedure (after all dbscipts<br>
&gt;&gt;&gt;&gt;&gt;&gt; execution)<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; That does sound as a good start not requiring much user involvement<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; or just provide the tool and admin will run in on demand<br>
&gt;&gt;&gt;&gt;&gt;&gt; - engine db credentials read from /etc/ovirt-engine/engine.conf.<wbr>d/<br>
&gt;&gt;&gt;&gt;&gt;&gt; - invocation:<br>
&gt;&gt;&gt;&gt;&gt;&gt;  ```<br>
&gt;&gt;&gt;&gt;&gt;&gt;  tool: [dbname(default engine)] [table: (default all)]<br>
&gt;&gt;&gt;&gt;&gt;&gt;  ```<br>
&gt;&gt;&gt;&gt;&gt;&gt; - if we invoke it on upgrade than an installation plugin should be<br>
&gt;&gt;&gt;&gt;&gt;&gt; added to invoke with default, no interaction<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; +1<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; - since VACUUM ANALYZE is consider a recommended maintenance task we<br>
&gt;&gt;&gt;&gt;&gt;&gt; can to it by default and ask the user for FULL.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; When would you run it? ANALYZE nightly?<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; No I&#39;d still avoid doing this repeatedly, autovaccum should handle that<br>
&gt;&gt;&gt;&gt; as well, but this would cover situations where it isn&#39;t functioning<br>
&gt;&gt;&gt;&gt; optimally.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I think  its worth adding a report of the db status and the rate of the<br>
&gt;&gt;&gt;&gt; autovacuum (a slight midifed version of the query mskrivanek ran on one of<br>
&gt;&gt;&gt;&gt; the production systems [3])  that will go to the logcollector. Perhaps the<br>
&gt;&gt;&gt;&gt; output of the ANALYZE will help as well.<br>
<br>
</div></div>I think that if possible, we should aim for automatic tuning of auto-vacuum.<br>
Either by checking the logs for failures and give it e.g. more time, or by<br>
checking analyze and deduce from that (if possible).<br></blockquote><div><br></div></div></div><div>This would be tricky and error prone. The autovacuum already can be configured using factors and costs<br></div><div>to respond changes. <br></div><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Another option is to disable autovacuum, and routinely run vacuum (not full<br>
vacuum), but then always let it finish successfully before starting the next<br>
run of it.<br></blockquote></span><div>Also a very dangerous path, I wouldn&#39;t try to outsmart autovacuum and I don&#39;t think its common to see. Disabling was maybe common<br></div><div>in pre 9 releases of PG and now this is not the case anymore<br><br></div><div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="m_-1908282014880511197HOEnZb"><div class="m_-1908282014880511197h5"><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; [3]<br>
&gt;&gt;&gt;&gt; <a href="https://gist.github.com/rgolangh/049cff30b89c5b29284ceee80a35dbb4#file-table_status_by_dead_rows-sql" rel="noreferrer" target="_blank">https://gist.github.com/rgolan<wbr>gh/049cff30b89c5b29284ceee80a3<wbr>5dbb4#file-table_status_by_<wbr>dead_rows-sql</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Very interesting collection of pg scrips to measure bloat and vacuum -<br>
&gt;&gt;&gt; needs access to postgres objects though<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; - <a href="https://github.com/pgexperts/pgx_scripts" rel="noreferrer" target="_blank">https://github.com/pgexperts/p<wbr>gx_scripts</a><br>
&gt;&gt;&gt; -<br>
&gt;&gt;&gt; <a href="https://github.com/pgexperts/pgx_scripts/blob/master/bloat/table_bloat_check.sql" rel="noreferrer" target="_blank">https://github.com/pgexperts/p<wbr>gx_scripts/blob/master/bloat/t<wbr>able_bloat_check.sql</a><br>
&gt;&gt;&gt; -<br>
&gt;&gt;&gt; <a href="https://github.com/pgexperts/pgx_scripts/blob/master/vacuum/last_autovacuum.sql" rel="noreferrer" target="_blank">https://github.com/pgexperts/p<wbr>gx_scripts/blob/master/vacuum/<wbr>last_autovacuum.sql</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Will the user know to answer intelligently if vacuum is needed or not?<br>
&gt;&gt;&gt;&gt;&gt; Except for &#39;yes, you need it&#39;, we cannot even provide a time estimate (I<br>
&gt;&gt;&gt;&gt;&gt; assume a disk space estimate is available!)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; perhaps we can estimate the bloat, there should be a github script to<br>
&gt;&gt;&gt;&gt; calculate that [4] not sure how good it is.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I would suggest to run ANALYZE for sure and provide an option at the<br>
&gt;&gt;&gt;&gt;&gt; end of installation, to run the required command line - so make it as<br>
&gt;&gt;&gt;&gt;&gt; accessible as possible, but not part of the flow.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; If there are no significant gains why bother any other time but on<br>
&gt;&gt;&gt;&gt;&gt; upgrade when it can be run unconditionally?<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I&#39;m wondering if the community can run ANALYZE on their database, and<br>
&gt;&gt;&gt;&gt;&gt; we can estimate how many are in dire need for full vacuum already.<br>
&gt;&gt;&gt;&gt;&gt; Y.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I&#39;ll send a different mail for that.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; - remote db is supported as well, doesn&#39;t have to be local<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Well, not sure if we need to bother. It was introduced for large<br>
&gt;&gt;&gt;&gt;&gt; deployments where the host can&#39;t fit both engine and db load. Do we still<br>
&gt;&gt;&gt;&gt;&gt; have this issue? I wouldn&#39;t say so for 4.1. It may be very niche case<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Running full vacuum is anyway a psql command, so there is no hidden cost<br>
&gt;&gt;&gt;&gt; here (to the development side I mean)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Thanks,<br>
&gt;&gt;&gt;&gt;&gt; michal<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; # Questions<br>
&gt;&gt;&gt;&gt;&gt;&gt;  - Will remote dwh have the credentials under<br>
&gt;&gt;&gt;&gt;&gt;&gt; /etc/ovirt-engine/engine.conf.<wbr>d?<br>
&gt;&gt;&gt;&gt;&gt;&gt;  - Should  AAA schema be taken into account as well?<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Please review, thanks<br>
&gt;&gt;&gt;&gt;&gt;&gt; Roy<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; [1] <a href="https://bugzilla.redhat.com/show_bug.cgi?id=1388430" rel="noreferrer" target="_blank">https://bugzilla.redhat.com/sh<wbr>ow_bug.cgi?id=1388430</a><br>
&gt;&gt;&gt;&gt;&gt;&gt; [2]<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="https://www.postgresql.org/docs/9.2/static/runtime-config-autovacuum.html" rel="noreferrer" target="_blank">https://www.postgresql.org/doc<wbr>s/9.2/static/runtime-config-<wbr>autovacuum.html</a><br>
&gt;&gt;&gt;&gt;&gt;&gt; [3] <a href="https://www.postgresql.org/docs/devel/static/sql-vacuum.html" rel="noreferrer" target="_blank">https://www.postgresql.org/doc<wbr>s/devel/static/sql-vacuum.html</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt;&gt;&gt;&gt; Users mailing list<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:Users@ovirt.org" target="_blank">Users@ovirt.org</a><br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="http://lists.ovirt.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.ovirt.org/mailman<wbr>/listinfo/users</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt;&gt;&gt; Users mailing list<br>
&gt;&gt;&gt;&gt;&gt; <a href="mailto:Users@ovirt.org" target="_blank">Users@ovirt.org</a><br>
&gt;&gt;&gt;&gt;&gt; <a href="http://lists.ovirt.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.ovirt.org/mailman<wbr>/listinfo/users</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt; Devel mailing list<br>
&gt;&gt;&gt; <a href="mailto:Devel@ovirt.org" target="_blank">Devel@ovirt.org</a><br>
&gt;&gt;&gt; <a href="http://lists.ovirt.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.ovirt.org/mailman<wbr>/listinfo/devel</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; -Eldad<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; -Eldad<br>
&gt;<br>
&gt; ______________________________<wbr>_________________<br>
&gt; Users mailing list<br>
&gt; <a href="mailto:Users@ovirt.org" target="_blank">Users@ovirt.org</a><br>
&gt; <a href="http://lists.ovirt.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.ovirt.org/mailman<wbr>/listinfo/users</a><br>
&gt;<br>
<br>
<br>
<br>
</div></div><span class="m_-1908282014880511197HOEnZb"><font color="#888888">--<br>
Didi<br>
</font></span></blockquote></div></div></div><br></div></div></blockquote><div><br><br></div><div>The simplest approach I find ATM is to put a post upgrade script under *share/ovirt-engine/dbscripts/upgrade/postupgrade/vacuum.sql *<br></div><div>```sql<br></div><div>VACUUM (FULL, ANALYZE, VERBOSE);<br>```<br></div><div>and that is performed for us, with no intervention, with no need to get the credentials and also the output goes to the setup log.<br></div></div><br><br></div></div>