[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:database\u002Fperformance-tuning":4,"config":214},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":115,"samples":129},"database","Veritabanı","","performance-tuning","Performance Tuning","tr",75,2475,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112],{"key":19,"name":20,"count":11},"backup-recovery","Backup Recovery",{"key":22,"name":23,"count":11},"data-modeling","Data Modeling",{"key":25,"name":26,"count":11},"indexing","Indexing",{"key":28,"name":29,"count":11},"mongodb-aggregation","Mongodb Aggregation",{"key":31,"name":32,"count":11},"mongodb-indexes-queries","Mongodb Indexes Queries",{"key":34,"name":35,"count":11},"mongodb-operations","Mongodb Operations",{"key":37,"name":38,"count":11},"mongodb-replication-sharding","Mongodb Replication Sharding",{"key":40,"name":41,"count":11},"mongodb-schema-modeling","Mongodb Schema Modeling",{"key":43,"name":44,"count":11},"mongodb-transactions-consistency","Mongodb Transactions Consistency",{"key":46,"name":47,"count":11},"mysql-indexes","Mysql Indexes",{"key":49,"name":50,"count":11},"mysql-innodb-transactions","Mysql Innodb Transactions",{"key":52,"name":53,"count":11},"mysql-operations","Mysql Operations",{"key":55,"name":56,"count":11},"mysql-query-optimization","Mysql Query Optimization",{"key":58,"name":59,"count":11},"mysql-replication-scaling","Mysql Replication Scaling",{"key":61,"name":62,"count":11},"mysql-types-constraints","Mysql Types Constraints",{"key":64,"name":65,"count":11},"nosql-models","Nosql Models",{"key":8,"name":9,"count":11},{"key":68,"name":69,"count":11},"pg-indexes","Pg Indexes",{"key":71,"name":72,"count":11},"pg-mvcc-vacuum","Pg Mvcc Vacuum",{"key":74,"name":75,"count":11},"pg-operations","Pg Operations",{"key":77,"name":78,"count":11},"pg-query-planning","Pg Query Planning",{"key":80,"name":81,"count":11},"pg-transactions-locking","Pg Transactions Locking",{"key":83,"name":84,"count":11},"pg-types-constraints","Pg Types Constraints",{"key":86,"name":87,"count":11},"query-optimization","Query Optimization",{"key":89,"name":90,"count":11},"redis-cluster-sharding","Redis Cluster Sharding",{"key":92,"name":93,"count":11},"redis-data-structures","Redis Data Structures",{"key":95,"name":96,"count":11},"redis-expiration-eviction","Redis Expiration Eviction",{"key":98,"name":99,"count":11},"redis-persistence","Redis Persistence",{"key":101,"name":102,"count":11},"redis-replication-sentinel","Redis Replication Sentinel",{"key":104,"name":105,"count":11},"redis-transactions-scripting","Redis Transactions Scripting",{"key":107,"name":108,"count":11},"replication-scaling","Replication Scaling",{"key":110,"name":111,"count":11},"security-access","Security Access",{"key":113,"name":114,"count":11},"transactions-isolation","Transactions Isolation",[116,120,123,126],{"key":117,"name":118,"count":119},"mongodb","MongoDB",450,{"key":121,"name":122,"count":119},"mysql","MySQL",{"key":124,"name":125,"count":119},"postgresql","PostgreSQL",{"key":127,"name":128,"count":119},"redis","Redis",[130,148,162,175,188,201],{"id":131,"topic":9,"difficulty":132,"body":133,"options":134,"correct_key":136,"explanation":147},"019f56bb-b683-70af-b4d2-53a5dd2c602b",1,"Yoğun uygulamalar neden her istek için yeni bir bağlantı açmak yerine bir database connection pool'u açık tutup bağlantıları yeniden kullanır?",[135,138,141,144],{"key":136,"text":137},"a","Her seferinde bağlantı kurmak pahalıdır (TCP setup, authentication, sunucu tarafında yeni bir backend), bu yüzden yeniden kullanım bu işi ortadan kaldırır",{"key":139,"text":140},"b","Pool'daki tek bir bağlantı ağ trafiğini şifreleyebilir, ayrı bağlantılar ise her zaman düz metin olarak gider",{"key":142,"text":143},"c","Pool tek bir sorguyu birçok bağlantıya bölerek tek bir yavaş sorgunun kat kat hızlı bitmesini sağlar",{"key":145,"text":146},"d","Database aynı bağlantıda birden fazla sorgu çalıştırmayı reddeder, bu yüzden pool olmadan çoğu sorgu başarısız olur","Bağlantı açmak TCP handshake, authentication ve sunucu tarafında bir process\u002Fthread ayırmayı içerir — basit bir sorguyu gölgede bırakan onlarca milisaniye. Pool sıcak bağlantıları tutup dağıtır, bu maliyet bir kez ödenir. Pooling tek bir sorguyu paralelleştirmez (c) ve şifrelemeyle ilgisizdir (b).",{"id":149,"topic":9,"difficulty":150,"body":151,"options":152,"correct_key":142,"explanation":161},"019f56bb-b686-7448-9b4b-b440969db256",2,"Yük altındaki bir servis 'too many connections' hatalarıyla düşmeye başlıyor; oysa database sunucusunun CPU ve disk'i neredeyse boşta. Her istek kendi doğrudan bağlantısını açıyor. En uygun çözüm nedir?",[153,155,157,159],{"key":136,"text":154},"Uygulama sunucularında işletim sisteminin file-descriptor limitini çok yüksek bir değere çıkarıp bağlantı açmaya devam etmek",{"key":139,"text":156},"Her sorguyu SELECT * yaparak database'in her bir statement'ı planlamaya daha az zaman harcamasını sağlamak",{"key":142,"text":158},"Database'in önüne bir connection pool koymak ve eşzamanlı bağlantı sayısını makul bir değerle sınırlamak",{"key":145,"text":160},"Database kullanıcısına superuser yetkisi vererek bağlantılarının limite sayılmamasını sağlamak","Her backend bağlantısı bellek ve bir sunucu process'i tüketir; sunucu katı bir max_connections limiti uygular ve istek başına bağlantı açmak bu limiti tüketir. Pool bağlantıları sınırlar ve yeniden kullanır, talebi sunucunun taşıyabileceğine oturtur. Superuser limitten muaf tutmaz (d), SELECT * durumu yalnızca kötüleştirir (b).",{"id":163,"topic":9,"difficulty":132,"body":164,"options":165,"correct_key":139,"explanation":174},"019f56bb-b688-777e-9088-4d4457644ee7","Çoğu ilişkisel database, yakın zamanda kullanılan data page'lerin büyük bir in-memory cache'ini tutar. Bu cache'in temel amacı nedir?",[166,168,170,172],{"key":136,"text":167},"Database'in kullanıcı hesaplarını ve yetki kurallarını saklamak, böylece authentication'ın hızlı kalmasını sağlamak",{"key":139,"text":169},"Sık erişilen veriyi RAM'den servis edip disk'ten yapılan yavaş okumaları önlemek",{"key":142,"text":171},"Verinin dayanıklı bir yedek kopyasını tutup tam bir disk arızasında hayatta kalmasını sağlamak",{"key":145,"text":173},"Eski data page'leri sıkıştırarak tablonun zamanla disk'te daha az yer kaplamasını sağlamak","Buffer\u002Fpage cache sıcak data page'leri bellekte tutar; böylece tekrarlı okumalar, kat kat yavaş olan disk'e gitmeden karşılanır. Bu bir dayanıklılık (durability) mekanizması değildir — o iş write-ahead log ve disk dosyalarınındır (c) — veriyi sıkıştırmaz ve auth kurallarını tutmaz.",{"id":176,"topic":9,"difficulty":150,"body":177,"options":178,"correct_key":145,"explanation":187},"019f56bb-b68a-7809-8ec6-d1bd070e2d8e","Bir rapor sorgusu, database yeniden başladıktan sonra ilk çalıştığında 4 saniye sürüyor; aynı veriyle ve başka değişiklik olmadan sonraki birkaç çalıştırmada yalnızca 80 ms. Bunu en olası açıklayan nedir?",[179,181,183,185],{"key":136,"text":180},"Query planner, sorguyu bir kez çalışırken gördükten sonra onu daha hızlı bir forma yeniden yazdı",{"key":139,"text":182},"İlk çalıştırma, herhangi bir satır dönmeden önce tablonun tüm index'lerini sıfırdan yeniden kurmak zorunda kaldı",{"key":142,"text":184},"Database, ilk çalıştırmadan sonra SQL metnini native makine koduna derledi",{"key":145,"text":186},"İlk çalıştırma data page'leri disk'ten memory cache'e okudu; sonraki çalıştırmalar bunları zaten cache'de buldu","Soğuk cache'te ilk çalıştırma, gereken page'leri buffer cache'e almak için fiziksel disk okumalarını öder; sonraki çalıştırmalar bu page'lere RAM'de erişip disk'i atlar. Burada değişen şey plan ya da derlenmiş statement değildir; okuma sırasında index'ler yeniden kurulmaz (b).",{"id":189,"topic":9,"difficulty":132,"body":190,"options":191,"correct_key":136,"explanation":200},"019f56bb-b68b-7ac6-bbb7-1b4be43cc230","Tipik bir database iş yükünde, hangi kaynak çoğu zaman birincil performans darboğazıdır?",[192,194,196,198],{"key":136,"text":193},"Disk I\u002FO — data page'leri okuyup yazmak, zaten bellekte olan veri üzerinde işlem yapmaktan çok daha yavaştır",{"key":139,"text":195},"Kullanılabilir RAM miktarı, çünkü working set'i belleğe sığan bir sorgu asla yavaşlayamaz",{"key":142,"text":197},"CPU saat hızı, çünkü her sorgu neredeyse her zaman I\u002FO-bound değil CPU-bound'dur",{"key":145,"text":199},"Şemadaki toplam tablo sayısı, çünkü motor her sorguda her tablonun header'ını taramak zorundadır","Database'ler CPU register'larına sığandan çok daha fazla veriyle çalışır ve disk (SSD dahi olsa) RAM'den kat kat yavaştır; bu yüzden genelde I\u002FO baskındır. Sıcak veriyi bellekte cache'lemenin önemi tam da budur. Çoğu OLTP sorgusu CPU-bound değil I\u002FO-bound'dur (c), tablo sayısı darboğaz değildir (d).",{"id":202,"topic":9,"difficulty":150,"body":203,"options":204,"correct_key":142,"explanation":213},"019f56bb-b68c-74f5-8020-b13764223f61","Bir import işlemi 10.000 satırı, her biri kendi ağ çağrısında olmak üzere 10.000 ayrı `INSERT INTO t (...) VALUES (...)` statement'ı göndererek yüklüyor. Toplam süreyi en doğrudan hangi değişiklik azaltır?",[205,207,209,211],{"key":136,"text":206},"Hedef tabloya birkaç index daha ekleyerek her bir INSERT'in disk'e daha hızlı yazılmasını sağlamak",{"key":139,"text":208},"Kolonları daha kısa adlarla yeniden adlandırıp her INSERT statement'ının parse edilmesini biraz küçültmek",{"key":142,"text":210},"Satırları çok-satırlı INSERT'lerde (ya da tek bir bulk statement'ta) gruplayarak çok daha az round trip yapmak",{"key":145,"text":212},"Her bir INSERT'i kendi ayrı transaction'ına sararak herhangi bir tek hatayı izole etmek","Buradaki baskın maliyet 10.000 ağ round trip'i ve statement başına parse'tır. Çok satırı tek INSERT'te (ya da bir bulk-load komutunda) gruplamak bu round trip'leri bir avuca indirir. Index eklemek her INSERT'i hızlandırmaz yavaşlatır (a); satır başına transaction commit maliyeti ekler (d).",{"fields":215,"seniorities":391,"interview_shapes":392,"locales":397,"oauth":399,"question_count":402,"coach_enabled":403,"jd_match_enabled":403},[216,241,261,278,302,315,324,343,365,372,378,385],{"key":217,"name_tr":218,"name_en":218,"sort":132,"specializations":219},"backend","Backend",[220,223,226,229,232,235,238],{"key":221,"name":222,"field":217},"general","Genel",{"key":224,"name":225,"field":217},"go","Go",{"key":227,"name":228,"field":217},"python","Python",{"key":230,"name":231,"field":217},"java","Java",{"key":233,"name":234,"field":217},"csharp","C#\u002F.NET",{"key":236,"name":237,"field":217},"nodejs","Node.js",{"key":239,"name":240,"field":217},"php","PHP",{"key":242,"name_tr":243,"name_en":243,"sort":150,"specializations":244},"frontend","Frontend",[245,246,249,252,255,258],{"key":221,"name":222,"field":242},{"key":247,"name":248,"field":242},"javascript","JavaScript",{"key":250,"name":251,"field":242},"typescript","TypeScript",{"key":253,"name":254,"field":242},"react","React",{"key":256,"name":257,"field":242},"vue","Vue",{"key":259,"name":260,"field":242},"angular","Angular",{"key":262,"name_tr":263,"name_en":263,"sort":264,"specializations":265},"fullstack","Fullstack",3,[266,267,268,269,270,271,272,273,274,275,276,277],{"key":221,"name":222,"field":262},{"key":224,"name":225,"field":217},{"key":227,"name":228,"field":217},{"key":230,"name":231,"field":217},{"key":233,"name":234,"field":217},{"key":236,"name":237,"field":217},{"key":239,"name":240,"field":217},{"key":247,"name":248,"field":242},{"key":250,"name":251,"field":242},{"key":253,"name":254,"field":242},{"key":256,"name":257,"field":242},{"key":259,"name":260,"field":242},{"key":279,"name_tr":280,"name_en":280,"sort":281,"specializations":282},"devops-cloud","DevOps \u002F Cloud",4,[283,284,287,290,293,296,299],{"key":221,"name":222,"field":279},{"key":285,"name":286,"field":279},"aws","AWS",{"key":288,"name":289,"field":279},"gcp","GCP",{"key":291,"name":292,"field":279},"azure","Azure",{"key":294,"name":295,"field":279},"kubernetes","Kubernetes",{"key":297,"name":298,"field":279},"terraform","Terraform",{"key":300,"name":301,"field":279},"linux","Linux",{"key":303,"name_tr":304,"name_en":304,"sort":305,"specializations":306},"ai-engineer","AI Engineer",5,[307,308,309,312],{"key":221,"name":222,"field":303},{"key":227,"name":228,"field":303},{"key":310,"name":311,"field":303},"llm-rag","LLM\u002FRAG",{"key":313,"name":314,"field":303},"mlops","MLOps",{"key":5,"name_tr":6,"name_en":316,"sort":317,"specializations":318},"Database",6,[319,320,321,322,323],{"key":221,"name":222,"field":5},{"key":124,"name":125,"field":5},{"key":121,"name":122,"field":5},{"key":117,"name":118,"field":5},{"key":127,"name":128,"field":5},{"key":325,"name_tr":326,"name_en":327,"sort":328,"specializations":329},"mobile","Mobil","Mobile",7,[330,331,334,337,340],{"key":221,"name":222,"field":325},{"key":332,"name":333,"field":325},"ios-swift","iOS (Swift)",{"key":335,"name":336,"field":325},"android-kotlin","Android (Kotlin)",{"key":338,"name":339,"field":325},"flutter","Flutter",{"key":341,"name":342,"field":325},"react-native","React Native",{"key":344,"name_tr":345,"name_en":346,"sort":347,"specializations":348},"security","Güvenlik","Security",8,[349,350,353,356,359,362],{"key":221,"name":222,"field":344},{"key":351,"name":352,"field":344},"appsec","AppSec",{"key":354,"name":355,"field":344},"offensive-pentest","Offensive \u002F Pentest",{"key":357,"name":358,"field":344},"cloud-security","Cloud Security",{"key":360,"name":361,"field":344},"devsecops","DevSecOps",{"key":363,"name":364,"field":344},"blue-team-incident","Blue Team \u002F Incident",{"key":366,"name_tr":367,"name_en":368,"sort":369,"specializations":370},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[371],{"key":221,"name":222,"field":366},{"key":373,"name_tr":374,"name_en":374,"sort":375,"specializations":376},"data-engineer","Data Engineer",10,[377],{"key":221,"name":222,"field":373},{"key":379,"name_tr":380,"name_en":381,"sort":382,"specializations":383},"game-dev","Oyun Geliştirme","Game Development",11,[384],{"key":221,"name":222,"field":379},{"key":386,"name_tr":387,"name_en":387,"sort":388,"specializations":389},"ml-engineer","ML Engineer",12,[390],{"key":221,"name":222,"field":386},[14,15,16],{"junior":393,"mid":395,"senior":396},{"questions":394,"median_sec":3},20,{"questions":394,"median_sec":3},{"questions":394,"median_sec":3},[10,398],"en",[400,401],"google","github",21750,true]