mirror of
https://github.com/LBRYFoundation/lbry-sdk.git
synced 2025-09-03 20:35:09 +00:00
sqlite perf test script
This commit is contained in:
parent
f3cedf2f44
commit
b81c801f2d
1 changed files with 72 additions and 0 deletions
72
lbry/scripts/sqlite_perf_test.py
Normal file
72
lbry/scripts/sqlite_perf_test.py
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
import asyncio, sqlite3, time
|
||||||
|
from concurrent.futures import ProcessPoolExecutor
|
||||||
|
from contextvars import ContextVar
|
||||||
|
|
||||||
|
|
||||||
|
db_path = '/tmp/wallet-server/claims.db'
|
||||||
|
db = ContextVar('db')
|
||||||
|
|
||||||
|
|
||||||
|
def init():
|
||||||
|
conn = sqlite3.connect(db_path)
|
||||||
|
db.set(conn)
|
||||||
|
|
||||||
|
|
||||||
|
def reader():
|
||||||
|
conn = db.get()
|
||||||
|
for _ in range(1):
|
||||||
|
conn.execute("""
|
||||||
|
SELECT
|
||||||
|
claimtrie.claim_hash as is_controlling,
|
||||||
|
claimtrie.last_take_over_height,
|
||||||
|
claim.claim_hash, claim.txo_hash,
|
||||||
|
claim.claims_in_channel,
|
||||||
|
claim.height, claim.creation_height,
|
||||||
|
claim.activation_height, claim.expiration_height,
|
||||||
|
claim.effective_amount, claim.support_amount,
|
||||||
|
claim.trending_group, claim.trending_mixed,
|
||||||
|
claim.trending_local, claim.trending_global,
|
||||||
|
claim.short_url, claim.canonical_url,
|
||||||
|
claim.channel_hash, channel.txo_hash AS channel_txo_hash,
|
||||||
|
channel.height AS channel_height, claim.signature_valid
|
||||||
|
FROM claim
|
||||||
|
LEFT JOIN claimtrie USING (claim_hash)
|
||||||
|
LEFT JOIN claim as channel ON (claim.channel_hash=channel.claim_hash)
|
||||||
|
WHERE
|
||||||
|
EXISTS(
|
||||||
|
SELECT 1 FROM tag WHERE claim.claim_hash=tag.claim_hash
|
||||||
|
AND tag IN ('alexandria ocasio-cortez', 'Alien', 'alt news', 'art', 'audio',
|
||||||
|
'automotive', 'beliefs', 'blockchain', 'dog grooming', 'economics', 'food',
|
||||||
|
'learning', 'mature', 'nature', 'news', 'physics', 'science', 'technology')
|
||||||
|
)
|
||||||
|
AND NOT EXISTS(
|
||||||
|
SELECT 1 FROM tag WHERE claim.claim_hash=tag.claim_hash AND tag IN ('nsfw', 'xxx', 'mature')
|
||||||
|
)
|
||||||
|
ORDER BY claim.height DESC, claim.normalized ASC
|
||||||
|
LIMIT 20 OFFSET 100
|
||||||
|
""").fetchall()
|
||||||
|
|
||||||
|
|
||||||
|
async def run_times(executor, iterations, show=True):
|
||||||
|
start = time.time()
|
||||||
|
await asyncio.gather(*(asyncio.get_running_loop().run_in_executor(executor, reader) for _ in range(iterations)))
|
||||||
|
elapsed = time.time() - start
|
||||||
|
if show:
|
||||||
|
print(f"{iterations:3}: {elapsed:.5f}ms total, {elapsed/iterations:.5f}ms/query")
|
||||||
|
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
executor = ProcessPoolExecutor(4, initializer=init)
|
||||||
|
await run_times(executor, 4, show=False)
|
||||||
|
await run_times(executor, 1)
|
||||||
|
await run_times(executor, 4)
|
||||||
|
await run_times(executor, 8)
|
||||||
|
await run_times(executor, 16)
|
||||||
|
await run_times(executor, 32)
|
||||||
|
await run_times(executor, 64)
|
||||||
|
await run_times(executor, 128)
|
||||||
|
await run_times(executor, 256)
|
||||||
|
executor.shutdown(True)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
asyncio.run(main())
|
Loading…
Add table
Reference in a new issue