On Mon, 30 Mar 2020 at 07:39, Amit Kapila <[email protected]> wrote: > > On Mon, Mar 30, 2020 at 4:18 AM Andres Freund <[email protected]> wrote: > > > > Hi, > > > > On 2020-01-20 02:33:34 +0000, Amit Kapila wrote: > > > Allow vacuum command to process indexes in parallel. > > > > > > This feature allows the vacuum to leverage multiple CPUs in order to > > > process indexes. This enables us to perform index vacuuming and index > > > cleanup with background workers. This adds a PARALLEL option to VACUUM > > > command where the user can specify the number of workers that can be used > > > to perform the command which is limited by the number of indexes on a > > > table. Specifying zero as a number of workers will disable parallelism. > > > This option can't be used with the FULL option. > > > > > > Each index is processed by at most one vacuum process. Therefore parallel > > > vacuum can be used when the table has at least two indexes. > > > > > > The parallel degree is either specified by the user or determined based on > > > the number of indexes that the table has, and further limited by > > > max_parallel_maintenance_workers. The index can participate in parallel > > > vacuum iff it's size is greater than min_parallel_index_scan_size. > > > > > > Author: Masahiko Sawada and Amit Kapila > > > Reviewed-by: Dilip Kumar, Amit Kapila, Robert Haas, Tomas Vondra, > > > Mahendra Singh and Sergei Kornilov > > > Tested-by: Mahendra Singh and Prabhat Sahu > > > Discussion: > > > https://postgr.es/m/cad21aodtpmgzskv4e3sfo1ch_x50bf5pqzfqf4jmqjk-c03...@mail.gmail.com > > > https://postgr.es/m/caa4ek1j-vor9gzs5e75pcd-oh0meycdp8rihcwkrcuw7j-q...@mail.gmail.com > > > > Coverity is complaining that: > > > ** CID ...: Incorrect expression (UNINTENDED_INTEGER_DIVISION) > > > /srv/coverity/git/pgsql-git/postgresql/src/backend/commands/vacuum.c: > > > 2078 in compute_parallel_delay() > > > > > > > > > ________________________________________________________________________________________________________ > > > *** CID ...: Incorrect expression (UNINTENDED_INTEGER_DIVISION) > > > /srv/coverity/git/pgsql-git/postgresql/src/backend/commands/vacuum.c: > > > 2078 in compute_parallel_delay() > > > 2072 shared_balance = > > > pg_atomic_add_fetch_u32(VacuumSharedCostBalance, VacuumCostBalance); > > > 2073 > > > 2074 /* Compute the total local balance for the current worker */ > > > 2075 VacuumCostBalanceLocal += VacuumCostBalance; > > > 2076 > > > 2077 if ((shared_balance >= VacuumCostLimit) && > > > >>> CID ...: Incorrect expression (UNINTENDED_INTEGER_DIVISION) > > > >>> Dividing integer expressions "VacuumCostLimit" and "nworkers", > > > >>> and then converting the integer quotient to type "double". Any > > > >>> remainder, or fractional part of the quotient, is ignored. > > > 2078 (VacuumCostBalanceLocal > 0.5 * (VacuumCostLimit / > > > nworkers))) > > > 2079 { > > > 2080 /* Compute sleep time based on the local cost > > > balance */ > > > 2081 msec = VacuumCostDelay * VacuumCostBalanceLocal / > > > VacuumCostLimit; > > > 2082 pg_atomic_sub_fetch_u32(VacuumSharedCostBalance, > > > VacuumCostBalanceLocal); > > > 2083 VacuumCostBalanceLocal = 0; > > > > Which seems like a fair enough complaint? > > > > I'll look into it. >
Hi, Attaching patch to fix this but I don't have coverity setup so I haven't verified fix. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com
v001-Fix-warning-in-compute_parallel_delay-for-Coverity.patch
Description: Binary data
