New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Poor performance of GET /api/accounts in case of some few parameters #2350

Closed
nazarhussain opened this Issue Aug 29, 2018 · 2 comments

Comments

Projects
4 participants
@nazarhussain
Contributor

nazarhussain commented Aug 29, 2018

Expected behavior

Performance of API GET /api/accounts?sort=balance:desc&offset=10&limit=100 should be satisfactory (under 1 second).

Actual behavior

We run some benchmarks with following spec:

CPU: 1vCPU (Digital Ocean) 
RAM: 1 GB Memory
Disk: 25 GB Disk
Connections: 10 
Time: 30s

And got the following results;

Fastest: 2.33
Slowest: 6.66
Average: 4.37

Steps to reproduce

Query endpoints mentioned above.

Which version(s) does this affect? (Environment, OS, etc...)

1.0.1 (after indexes)

@MaciejBaj MaciejBaj added this to the Version 1.0.2 milestone Aug 30, 2018

@MaciejBaj MaciejBaj added this to Open Issues in Version 1.0.0 via automation Aug 30, 2018

@nazarhussain nazarhussain changed the title from Poor performance of GET /api/accounts?sort=[balance:desc] to Poor performance of GET /api/accounts in case of some few parameters Aug 30, 2018

@MaciejBaj MaciejBaj removed this from the Version 1.0.2 milestone Aug 30, 2018

@MaciejBaj MaciejBaj added this to New Issues in Version 1.1.0 via automation Aug 30, 2018

@MaciejBaj MaciejBaj removed this from Open Issues in Version 1.0.0 Aug 30, 2018

@4miners

This comment has been minimized.

Show comment
Hide comment
@4miners

4miners Aug 30, 2018

Member

When calling this endpoint we are executing the following query:

SELECT "isDelegate"::int::boolean AS "isDelegate",
       "u_isDelegate"::int::boolean AS "u_isDelegate",
       "secondSignature"::int::boolean AS "secondSignature",
       "u_secondSignature"::int::boolean AS "u_secondSignature",
       "balance"::bigint AS "balance",
       "u_balance"::bigint AS "u_balance",
       "rate"::bigint AS "rate",
       "multimin" AS "multimin",
       "u_multimin" AS "u_multimin",
       "multilifetime" AS "multilifetime",
       "u_multilifetime" AS "u_multilifetime",
       "nameexist" AS "nameexist",
       "u_nameexist" AS "u_nameexist",
       "fees"::bigint AS "fees",
       "rewards"::bigint AS "rewards",
       "vote"::bigint AS "vote",
       "producedBlocks"::bigint AS "producedBlocks",
       "missedBlocks"::bigint AS "missedBlocks",
       "username" AS "username",
       "u_username" AS "u_username",
       (encode("publicKey", 'hex')) AS "publicKey",
       (encode("secondPublicKey", 'hex')) AS "secondPublicKey",
       "address" AS "address",
       (
          (SELECT m.row_number
           FROM
             (SELECT row_number() OVER (
                                        ORDER BY r.vote DESC, r."publicKey" ASC), address
              FROM
                (SELECT d."isDelegate",
                        d.vote,
                        d."publicKey",
                        d.address
                 FROM mem_accounts AS d
                 WHERE d."isDelegate" = 1) AS r) m
           WHERE m.address = mem_accounts.address )::bigint) AS "rank",
       (
          (SELECT array_agg("dependentId")
           FROM mem_accounts2delegates
           WHERE "accountId" = mem_accounts.address )) AS "delegates",
       (
          (SELECT array_agg("dependentId")
           FROM mem_accounts2u_delegates
           WHERE "accountId" = mem_accounts.address )) AS "u_delegates",
       (
          (SELECT array_agg("dependentId")
           FROM mem_accounts2multisignatures
           WHERE "accountId" = mem_accounts.address )) AS "multisignatures",
       (
          (SELECT array_agg("dependentId")
           FROM mem_accounts2u_multisignatures
           WHERE "accountId" = mem_accounts.address )) AS "u_multisignatures"
FROM "mem_accounts"
ORDER BY "balance" DESC
LIMIT 10
OFFSET 0;

Query plan is following:

                                                                                    QUERY PLAN                                                                                     
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.42..16600.93 rows=10 width=321) (actual time=9.097..44.930 rows=10 loops=1)
   Buffers: shared hit=15732
   ->  Index Scan Backward using mem_accounts_balance on mem_accounts  (cost=0.42..349040746.24 rows=210259 width=321) (actual time=9.095..44.921 rows=10 loops=1)
         Buffers: shared hit=15732
         SubPlan 1
           ->  Subquery Scan on m  (cost=310.65..360.77 rows=1 width=8) (actual time=4.289..4.289 rows=0 loops=10)
                 Filter: ((m.address)::text = (mem_accounts.address)::text)
                 Rows Removed by Filter: 1715
                 Buffers: shared hit=15619
                 ->  WindowAgg  (cost=310.65..341.49 rows=1542 width=70) (actual time=3.150..4.056 rows=1715 loops=10)
                       Buffers: shared hit=15619
                       ->  Sort  (cost=310.65..314.51 rows=1542 width=62) (actual time=3.143..3.390 rows=1715 loops=10)
                             Sort Key: d.vote DESC, d."publicKey"
                             Sort Method: quicksort  Memory: 290kB
                             Buffers: shared hit=15619
                             ->  Index Scan using mem_accounts_is_delegate on mem_accounts d  (cost=0.42..229.00 rows=1542 width=62) (actual time=0.016..2.226 rows=1715 loops=10)
                                   Index Cond: ("isDelegate" = 1)
                                   Buffers: shared hit=15613
         SubPlan 2
           ->  Aggregate  (cost=338.57..338.58 rows=1 width=32) (actual time=0.037..0.037 rows=1 loops=10)
                 Buffers: shared hit=30
                 ->  Bitmap Heap Scan on mem_accounts2delegates  (cost=5.11..338.35 rows=88 width=65) (actual time=0.027..0.027 rows=0 loops=10)
                       Recheck Cond: (("accountId")::text = (mem_accounts.address)::text)
                       Buffers: shared hit=30
                       ->  Bitmap Index Scan on "mem_accounts2delegates_accountId"  (cost=0.00..5.09 rows=88 width=0) (actual time=0.025..0.025 rows=0 loops=10)
                             Index Cond: (("accountId")::text = (mem_accounts.address)::text)
                             Buffers: shared hit=30
         SubPlan 3
           ->  Aggregate  (cost=956.21..956.22 rows=1 width=32) (actual time=0.024..0.025 rows=1 loops=10)
                 Buffers: shared hit=40
                 ->  Bitmap Heap Scan on mem_accounts2u_delegates  (cost=26.41..955.60 rows=240 width=65) (actual time=0.021..0.021 rows=0 loops=10)
                       Recheck Cond: (("accountId")::text = (mem_accounts.address)::text)
                       Buffers: shared hit=40
                       ->  Bitmap Index Scan on "mem_accounts2u_delegates_accountId"  (cost=0.00..26.36 rows=240 width=0) (actual time=0.020..0.020 rows=0 loops=10)
                             Index Cond: (("accountId")::text = (mem_accounts.address)::text)
                             Buffers: shared hit=40
         SubPlan 4
           ->  Aggregate  (cost=1.65..1.66 rows=1 width=32) (actual time=0.020..0.020 rows=1 loops=10)
                 Buffers: shared hit=10
                 ->  Seq Scan on mem_accounts2multisignatures  (cost=0.00..1.65 rows=1 width=146) (actual time=0.012..0.013 rows=0 loops=10)
                       Filter: (("accountId")::text = (mem_accounts.address)::text)
                       Rows Removed by Filter: 52
                       Buffers: shared hit=10
         SubPlan 5
           ->  Aggregate  (cost=2.66..2.67 rows=1 width=32) (actual time=0.014..0.014 rows=1 loops=10)
                 Buffers: shared hit=20
                 ->  Seq Scan on mem_accounts2u_multisignatures  (cost=0.00..2.65 rows=4 width=65) (actual time=0.011..0.011 rows=0 loops=10)
                       Filter: (("accountId")::text = (mem_accounts.address)::text)
                       Rows Removed by Filter: 52
                       Buffers: shared hit=20
 Planning time: 2.585 ms
 Execution time: 45.251 ms
(52 rows)

The performance degradation here is directly related to subqueries (as described here: #2351)
For example by providing limit 100 and offset 1000 - those subqueries will be executed 1100 times.
Query plan:

                                                                                     QUERY PLAN                                                                                      
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=1511059.05..1662164.91 rows=100 width=321) (actual time=5357.860..5851.243 rows=100 loops=1)
   Buffers: shared hit=1748880 read=20790 dirtied=40 written=2291
   ->  Index Scan Backward using mem_accounts_balance on mem_accounts  (cost=0.42..317713676.63 rows=210259 width=321) (actual time=14.142..5850.763 rows=1100 loops=1)
         Buffers: shared hit=1748880 read=20790 dirtied=40 written=2291
         SubPlan 1
           ->  Subquery Scan on m  (cost=310.65..360.77 rows=1 width=8) (actual time=3.770..3.922 rows=0 loops=1100)
                 Filter: ((m.address)::text = (mem_accounts.address)::text)
                 Rows Removed by Filter: 1715
                 Buffers: shared hit=1717100
                 ->  WindowAgg  (cost=310.65..341.49 rows=1542 width=70) (actual time=2.685..3.664 rows=1715 loops=1100)
                       Buffers: shared hit=1717100
                       ->  Sort  (cost=310.65..314.51 rows=1542 width=62) (actual time=2.680..2.961 rows=1715 loops=1100)
                             Sort Key: d.vote DESC, d."publicKey"
                             Sort Method: quicksort  Memory: 290kB
                             Buffers: shared hit=1717100
                             ->  Index Scan using mem_accounts_is_delegate on mem_accounts d  (cost=0.42..229.00 rows=1542 width=62) (actual time=0.013..1.839 rows=1715 loops=1100)
                                   Index Cond: ("isDelegate" = 1)
                                   Buffers: shared hit=1717100
         SubPlan 2
           ->  Aggregate  (cost=338.57..338.58 rows=1 width=32) (actual time=0.772..0.772 rows=1 loops=1100)
                 Buffers: shared hit=7614 read=4714 written=504
                 ->  Bitmap Heap Scan on mem_accounts2delegates  (cost=5.11..338.35 rows=88 width=65) (actual time=0.696..0.738 rows=67 loops=1100)
                       Recheck Cond: (("accountId")::text = (mem_accounts.address)::text)
                       Heap Blocks: exact=8671
                       Buffers: shared hit=7614 read=4714 written=504
                       ->  Bitmap Index Scan on "mem_accounts2delegates_accountId"  (cost=0.00..5.09 rows=88 width=0) (actual time=0.681..0.681 rows=67 loops=1100)
                             Index Cond: (("accountId")::text = (mem_accounts.address)::text)
                             Buffers: shared hit=2531 read=1126 written=132
         SubPlan 3
           ->  Aggregate  (cost=807.21..807.22 rows=1 width=32) (actual time=0.467..0.468 rows=1 loops=1100)
                 Buffers: shared hit=18707 read=15258 written=1731
                 ->  Bitmap Heap Scan on mem_accounts2u_delegates  (cost=26.11..806.71 rows=201 width=65) (actual time=0.405..0.440 rows=67 loops=1100)
                       Recheck Cond: (("accountId")::text = (mem_accounts.address)::text)
                       Heap Blocks: exact=27163
                       Buffers: shared hit=18707 read=15258 written=1731
                       ->  Bitmap Index Scan on "mem_accounts2u_delegates_accountId"  (cost=0.00..26.06 rows=201 width=0) (actual time=0.327..0.327 rows=208 loops=1100)
                             Index Cond: (("accountId")::text = (mem_accounts.address)::text)
                             Buffers: shared hit=4072 read=2730 written=302
         SubPlan 4
           ->  Aggregate  (cost=1.65..1.66 rows=1 width=32) (actual time=0.015..0.015 rows=1 loops=1100)
                 Buffers: shared hit=1100
                 ->  Seq Scan on mem_accounts2multisignatures  (cost=0.00..1.65 rows=1 width=146) (actual time=0.011..0.011 rows=0 loops=1100)
                       Filter: (("accountId")::text = (mem_accounts.address)::text)
                       Rows Removed by Filter: 52
                       Buffers: shared hit=1100
         SubPlan 5
           ->  Aggregate  (cost=2.66..2.67 rows=1 width=32) (actual time=0.012..0.012 rows=1 loops=1100)
                 Buffers: shared hit=2200
                 ->  Seq Scan on mem_accounts2u_multisignatures  (cost=0.00..2.65 rows=4 width=65) (actual time=0.009..0.009 rows=0 loops=1100)
                       Filter: (("accountId")::text = (mem_accounts.address)::text)
                       Rows Removed by Filter: 52
                       Buffers: shared hit=2200
 Planning time: 0.304 ms
 Execution time: 5851.440 ms
(54 rows)

After get rid of delegate rank the execution time decreases to 1037.198 ms, which is still too long.

Member

4miners commented Aug 30, 2018

When calling this endpoint we are executing the following query:

SELECT "isDelegate"::int::boolean AS "isDelegate",
       "u_isDelegate"::int::boolean AS "u_isDelegate",
       "secondSignature"::int::boolean AS "secondSignature",
       "u_secondSignature"::int::boolean AS "u_secondSignature",
       "balance"::bigint AS "balance",
       "u_balance"::bigint AS "u_balance",
       "rate"::bigint AS "rate",
       "multimin" AS "multimin",
       "u_multimin" AS "u_multimin",
       "multilifetime" AS "multilifetime",
       "u_multilifetime" AS "u_multilifetime",
       "nameexist" AS "nameexist",
       "u_nameexist" AS "u_nameexist",
       "fees"::bigint AS "fees",
       "rewards"::bigint AS "rewards",
       "vote"::bigint AS "vote",
       "producedBlocks"::bigint AS "producedBlocks",
       "missedBlocks"::bigint AS "missedBlocks",
       "username" AS "username",
       "u_username" AS "u_username",
       (encode("publicKey", 'hex')) AS "publicKey",
       (encode("secondPublicKey", 'hex')) AS "secondPublicKey",
       "address" AS "address",
       (
          (SELECT m.row_number
           FROM
             (SELECT row_number() OVER (
                                        ORDER BY r.vote DESC, r."publicKey" ASC), address
              FROM
                (SELECT d."isDelegate",
                        d.vote,
                        d."publicKey",
                        d.address
                 FROM mem_accounts AS d
                 WHERE d."isDelegate" = 1) AS r) m
           WHERE m.address = mem_accounts.address )::bigint) AS "rank",
       (
          (SELECT array_agg("dependentId")
           FROM mem_accounts2delegates
           WHERE "accountId" = mem_accounts.address )) AS "delegates",
       (
          (SELECT array_agg("dependentId")
           FROM mem_accounts2u_delegates
           WHERE "accountId" = mem_accounts.address )) AS "u_delegates",
       (
          (SELECT array_agg("dependentId")
           FROM mem_accounts2multisignatures
           WHERE "accountId" = mem_accounts.address )) AS "multisignatures",
       (
          (SELECT array_agg("dependentId")
           FROM mem_accounts2u_multisignatures
           WHERE "accountId" = mem_accounts.address )) AS "u_multisignatures"
FROM "mem_accounts"
ORDER BY "balance" DESC
LIMIT 10
OFFSET 0;

Query plan is following:

                                                                                    QUERY PLAN                                                                                     
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.42..16600.93 rows=10 width=321) (actual time=9.097..44.930 rows=10 loops=1)
   Buffers: shared hit=15732
   ->  Index Scan Backward using mem_accounts_balance on mem_accounts  (cost=0.42..349040746.24 rows=210259 width=321) (actual time=9.095..44.921 rows=10 loops=1)
         Buffers: shared hit=15732
         SubPlan 1
           ->  Subquery Scan on m  (cost=310.65..360.77 rows=1 width=8) (actual time=4.289..4.289 rows=0 loops=10)
                 Filter: ((m.address)::text = (mem_accounts.address)::text)
                 Rows Removed by Filter: 1715
                 Buffers: shared hit=15619
                 ->  WindowAgg  (cost=310.65..341.49 rows=1542 width=70) (actual time=3.150..4.056 rows=1715 loops=10)
                       Buffers: shared hit=15619
                       ->  Sort  (cost=310.65..314.51 rows=1542 width=62) (actual time=3.143..3.390 rows=1715 loops=10)
                             Sort Key: d.vote DESC, d."publicKey"
                             Sort Method: quicksort  Memory: 290kB
                             Buffers: shared hit=15619
                             ->  Index Scan using mem_accounts_is_delegate on mem_accounts d  (cost=0.42..229.00 rows=1542 width=62) (actual time=0.016..2.226 rows=1715 loops=10)
                                   Index Cond: ("isDelegate" = 1)
                                   Buffers: shared hit=15613
         SubPlan 2
           ->  Aggregate  (cost=338.57..338.58 rows=1 width=32) (actual time=0.037..0.037 rows=1 loops=10)
                 Buffers: shared hit=30
                 ->  Bitmap Heap Scan on mem_accounts2delegates  (cost=5.11..338.35 rows=88 width=65) (actual time=0.027..0.027 rows=0 loops=10)
                       Recheck Cond: (("accountId")::text = (mem_accounts.address)::text)
                       Buffers: shared hit=30
                       ->  Bitmap Index Scan on "mem_accounts2delegates_accountId"  (cost=0.00..5.09 rows=88 width=0) (actual time=0.025..0.025 rows=0 loops=10)
                             Index Cond: (("accountId")::text = (mem_accounts.address)::text)
                             Buffers: shared hit=30
         SubPlan 3
           ->  Aggregate  (cost=956.21..956.22 rows=1 width=32) (actual time=0.024..0.025 rows=1 loops=10)
                 Buffers: shared hit=40
                 ->  Bitmap Heap Scan on mem_accounts2u_delegates  (cost=26.41..955.60 rows=240 width=65) (actual time=0.021..0.021 rows=0 loops=10)
                       Recheck Cond: (("accountId")::text = (mem_accounts.address)::text)
                       Buffers: shared hit=40
                       ->  Bitmap Index Scan on "mem_accounts2u_delegates_accountId"  (cost=0.00..26.36 rows=240 width=0) (actual time=0.020..0.020 rows=0 loops=10)
                             Index Cond: (("accountId")::text = (mem_accounts.address)::text)
                             Buffers: shared hit=40
         SubPlan 4
           ->  Aggregate  (cost=1.65..1.66 rows=1 width=32) (actual time=0.020..0.020 rows=1 loops=10)
                 Buffers: shared hit=10
                 ->  Seq Scan on mem_accounts2multisignatures  (cost=0.00..1.65 rows=1 width=146) (actual time=0.012..0.013 rows=0 loops=10)
                       Filter: (("accountId")::text = (mem_accounts.address)::text)
                       Rows Removed by Filter: 52
                       Buffers: shared hit=10
         SubPlan 5
           ->  Aggregate  (cost=2.66..2.67 rows=1 width=32) (actual time=0.014..0.014 rows=1 loops=10)
                 Buffers: shared hit=20
                 ->  Seq Scan on mem_accounts2u_multisignatures  (cost=0.00..2.65 rows=4 width=65) (actual time=0.011..0.011 rows=0 loops=10)
                       Filter: (("accountId")::text = (mem_accounts.address)::text)
                       Rows Removed by Filter: 52
                       Buffers: shared hit=20
 Planning time: 2.585 ms
 Execution time: 45.251 ms
(52 rows)

The performance degradation here is directly related to subqueries (as described here: #2351)
For example by providing limit 100 and offset 1000 - those subqueries will be executed 1100 times.
Query plan:

                                                                                     QUERY PLAN                                                                                      
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=1511059.05..1662164.91 rows=100 width=321) (actual time=5357.860..5851.243 rows=100 loops=1)
   Buffers: shared hit=1748880 read=20790 dirtied=40 written=2291
   ->  Index Scan Backward using mem_accounts_balance on mem_accounts  (cost=0.42..317713676.63 rows=210259 width=321) (actual time=14.142..5850.763 rows=1100 loops=1)
         Buffers: shared hit=1748880 read=20790 dirtied=40 written=2291
         SubPlan 1
           ->  Subquery Scan on m  (cost=310.65..360.77 rows=1 width=8) (actual time=3.770..3.922 rows=0 loops=1100)
                 Filter: ((m.address)::text = (mem_accounts.address)::text)
                 Rows Removed by Filter: 1715
                 Buffers: shared hit=1717100
                 ->  WindowAgg  (cost=310.65..341.49 rows=1542 width=70) (actual time=2.685..3.664 rows=1715 loops=1100)
                       Buffers: shared hit=1717100
                       ->  Sort  (cost=310.65..314.51 rows=1542 width=62) (actual time=2.680..2.961 rows=1715 loops=1100)
                             Sort Key: d.vote DESC, d."publicKey"
                             Sort Method: quicksort  Memory: 290kB
                             Buffers: shared hit=1717100
                             ->  Index Scan using mem_accounts_is_delegate on mem_accounts d  (cost=0.42..229.00 rows=1542 width=62) (actual time=0.013..1.839 rows=1715 loops=1100)
                                   Index Cond: ("isDelegate" = 1)
                                   Buffers: shared hit=1717100
         SubPlan 2
           ->  Aggregate  (cost=338.57..338.58 rows=1 width=32) (actual time=0.772..0.772 rows=1 loops=1100)
                 Buffers: shared hit=7614 read=4714 written=504
                 ->  Bitmap Heap Scan on mem_accounts2delegates  (cost=5.11..338.35 rows=88 width=65) (actual time=0.696..0.738 rows=67 loops=1100)
                       Recheck Cond: (("accountId")::text = (mem_accounts.address)::text)
                       Heap Blocks: exact=8671
                       Buffers: shared hit=7614 read=4714 written=504
                       ->  Bitmap Index Scan on "mem_accounts2delegates_accountId"  (cost=0.00..5.09 rows=88 width=0) (actual time=0.681..0.681 rows=67 loops=1100)
                             Index Cond: (("accountId")::text = (mem_accounts.address)::text)
                             Buffers: shared hit=2531 read=1126 written=132
         SubPlan 3
           ->  Aggregate  (cost=807.21..807.22 rows=1 width=32) (actual time=0.467..0.468 rows=1 loops=1100)
                 Buffers: shared hit=18707 read=15258 written=1731
                 ->  Bitmap Heap Scan on mem_accounts2u_delegates  (cost=26.11..806.71 rows=201 width=65) (actual time=0.405..0.440 rows=67 loops=1100)
                       Recheck Cond: (("accountId")::text = (mem_accounts.address)::text)
                       Heap Blocks: exact=27163
                       Buffers: shared hit=18707 read=15258 written=1731
                       ->  Bitmap Index Scan on "mem_accounts2u_delegates_accountId"  (cost=0.00..26.06 rows=201 width=0) (actual time=0.327..0.327 rows=208 loops=1100)
                             Index Cond: (("accountId")::text = (mem_accounts.address)::text)
                             Buffers: shared hit=4072 read=2730 written=302
         SubPlan 4
           ->  Aggregate  (cost=1.65..1.66 rows=1 width=32) (actual time=0.015..0.015 rows=1 loops=1100)
                 Buffers: shared hit=1100
                 ->  Seq Scan on mem_accounts2multisignatures  (cost=0.00..1.65 rows=1 width=146) (actual time=0.011..0.011 rows=0 loops=1100)
                       Filter: (("accountId")::text = (mem_accounts.address)::text)
                       Rows Removed by Filter: 52
                       Buffers: shared hit=1100
         SubPlan 5
           ->  Aggregate  (cost=2.66..2.67 rows=1 width=32) (actual time=0.012..0.012 rows=1 loops=1100)
                 Buffers: shared hit=2200
                 ->  Seq Scan on mem_accounts2u_multisignatures  (cost=0.00..2.65 rows=4 width=65) (actual time=0.009..0.009 rows=0 loops=1100)
                       Filter: (("accountId")::text = (mem_accounts.address)::text)
                       Rows Removed by Filter: 52
                       Buffers: shared hit=2200
 Planning time: 0.304 ms
 Execution time: 5851.440 ms
(54 rows)

After get rid of delegate rank the execution time decreases to 1037.198 ms, which is still too long.

@4miners

This comment has been minimized.

Show comment
Hide comment
@4miners

4miners Aug 30, 2018

Member

Also, we don't need those subqueries at all for API, as the response does not include those data.

Member

4miners commented Aug 30, 2018

Also, we don't need those subqueries at all for API, as the response does not include those data.

@MaciejBaj MaciejBaj added this to the Version 1.1.0 milestone Aug 30, 2018

@diego-G diego-G added this to Sprint Backlog in Lisk Pipelines Sep 4, 2018

@diego-G diego-G added the *medium label Sep 4, 2018

@shuse2 shuse2 closed this in c7c6592 Sep 4, 2018

Version 1.1.0 automation moved this from New Issues to Closed Issues Sep 4, 2018

@diego-G diego-G removed this from Sprint Backlog in Lisk Pipelines Sep 4, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment