Php ve mysql ile yazdigim uygulamada fazla sorgu calisinca bazi delete sorgulari eksik calisiyor
3
●106
- 12-01-2024, 00:08:41Php ve mysql ile yazdigim uygulamada fazla sorgu calisinca bazi delete sorgulari eksik calisiyor bunu nasilkontrol edebilirim ne yapabilirim
- 12-01-2024, 00:11:49Hocam çok az bir info ile çözüme ulaşmamız çok zor. En azından mysql sorgularınızın bazılarını buraya yazabilirsiniz. Eğer pure php yazıyorsanız (ki tavsiye etmem) ve çok fazla bağlantılı delete sorgunuz var ise, muhtemelen timeout'a düşüyordur. mysql trigger sorgularını bir araştırın. Tek bir delete sorgusu ile bağlantılı tüm kayıtları silebilirsiniz.
Localde çalışıyorsanız, kullandığınız dosyanın en üst satırına;
ini_set('max_execution_time', 0);
set_time_limit(0);
ekleyin. Sunucuda çalışıyorsanız, sunucu sağlığı için önerilmez. - 12-01-2024, 00:22:48sorgularını optimize etmeyi deniyebilirsin misal foreach içerisinde sorgu kullanılmaz zor da kalmadıkca ya da daha iyisi için performans ve stabillik adına foreachde dataset'ini array'de toplayıp sonra arraydeki veriyi o şekilde insert yada update delete edersin hatta bu aşamada bile array'de çok fazla veri tutuluyorsa array chunk ile parçalayıp o şekilde dataset'ini tekrar 3000 5000 gibi parçalar halinde toplu şekilde DB işlemleri yapılabilir. Yani bunu ben uzun süredir yaptığım performans iyileştirmeleri olsun sunucu kaynak tüketimi olsun process'in süresinin azalması gibi birçok testlerimde gözlemliyorum ve daha iyi şekile getirmek için kodu yazdığım süre kadar neredeyse iyileştirme ve stabillik adınada çalışmalar yapıyorum. Bu zaten öyle 3k 5k 10k veride bişey farkettirmez 50k ve üzeri veride toplu işlemler yaptırmak istersen burada işte sunucunun performansını kaynaklarını sömürmeye başlıyor iki seçenek oluyor ya sunucuyu güçlendircen ya kodunu optimize edicen maliyettense koddaki sorguları yada tekrar eden verilerde cache kullanarak sunucu tarafında daha az kaynak tüketerek güçlü işlemler yapabilirsin. Ama önceliğin kod bloğundaki sorgularını işlem sıralarını verilerini iyi gözlemleyip bir iyileştirme planı yapman gerek gerekirse işlem başlangıç ve bitişlerine LOG ile time ekleyip her işlemin ne kadar sürdüğünü süresi fazla geliyorsa o işleme yoğunlaşarak onun iyileştirmesini yapabilirsin. Ayrıca PHP asenkron çalışmaz yani kod bloğundaki kod sırasına göre işlem yapar eğer arada kaynayan gerçekleşmemiş bir kod var diyorsan o function'a giden eksik veri vardır çünkü PHP'de bu mümkün olmaz ben bu satırı es geçeyim diğerine atlıyayım yok sırasıyla yapar bir işlem biter diğerine geçer işlemler sırasında bir eksiklik varsa verilerde yada işlem sırasında yanlışlık vardır saygılar
- 12-01-2024, 00:23:23<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
include('./db/db.php');
if(isset($_POST['tableData'], $_POST['sectionData'], $_POST['totalAt'])) {
$tableData = $_POST['tableData'];
$sectionData = $_POST['sectionData'];
$totalAt = $_POST['totalAt'];
$sqlSection = "SELECT id FROM section WHERE name = ?";
$stmtSection = $conn->prepare($sqlSection);
$stmtSection->bind_param("s", $sectionData);
$stmtSection->execute();
$resultSection = $stmtSection->get_result();
if($resultSection->num_rows > 0) {
$rowSection = $resultSection->fetch_assoc();
$sectionId = $rowSection["id"];
$sqlTable = "SELECT id, total FROM tables WHERE name = ? AND section_id = ?";
$stmtTable = $conn->prepare($sqlTable);
$stmtTable->bind_param("si", $tableData, $sectionId);
$stmtTable->execute();
$resultTable = $stmtTable->get_result();
if($resultTable->num_rows > 0) {
$rowTable = $resultTable->fetch_assoc();
$tableId = $rowTable['id'];
$totalCheck = $rowTable['total'];
if(floatval($totalCheck) == floatval($totalAt)) {
------------------------------------- BURADA ------------------------------------------------------------------------------------------------------------------------------
$sqlPayedDelete = "DELETE FROM payedList WHERE tables_id = ? AND section_id = ?";
$stmtPayedDelete = $conn->prepare($sqlPayedDelete);
$stmtPayedDelete->bind_param("ii", $tableId, $sectionId);
$stmtPayedDelete->execute();
$sqlDelete = "DELETE FROM tableContent WHERE tablesId = ? AND sectionId = ?";
$stmtDelete = $conn->prepare($sqlDelete);
$stmtDelete->bind_param("ii", $tableId, $sectionId);
$delete = $stmtDelete->execute();
if($delete) {
$sqlUpdate = "UPDATE tables SET total = 0, save = 0, ready = 0 WHERE name = ? AND section_id = ?";
$stmtUpdate = $conn->prepare($sqlUpdate);
$stmtUpdate->bind_param("si", $tableData, $sectionId);
$update = $stmtUpdate->execute();
if($update) {
echo "Veriler başarıyla işlendi.";
} else {
echo "Sorguda bir hata oluştu: " . $conn->error;
}
} else {
echo "Sorguda bir hata oluştu: " . $conn->error;
}
} else {
$sqlUpdateTotal = "UPDATE tables SET save = ? WHERE name = ? AND section_id = ?";
$stmtUpdateTotal = $conn->prepare($sqlUpdateTotal);
$stmtUpdateTotal->bind_param("dss", $totalAt, $tableData, $sectionId);
if($stmtUpdateTotal->execute()) {
echo "Veriler başarıyla işlendi.";
} else {
echo "Sorguda bir hata oluştu: " . $conn->error;
}
}
$newSqlCheck = "SELECT total, save FROM tables WHERE name = ? AND section_id = ?";
$stmtNew = $conn->prepare($newSqlCheck);
$stmtNew->bind_param("si", $tableData, $sectionId);
$stmtNew->execute();
$resultNew = $stmtNew->get_result();
if($resultNew->num_rows > 0) {
$rowNew = $resultNew->fetch_assoc();
$currentTotal = $rowNew['total'];
$currentSave = $rowNew['save'];
if ($currentTotal == 0 && $currentSave != 0) {
// if total value 0 and save value not 0 again check save value
$sqlUpdateSave = "UPDATE tables SET save = 0 WHERE name = ? AND section_id = ?";
$stmtUpdateSave = $conn->prepare($sqlUpdateSave);
$stmtUpdateSave->bind_param("si", $tableData, $sectionId);
if ($stmtUpdateSave->execute()) {
// second check to payedList delete
------------------------------------- BURADA ------------------------------------------------------------------------------------------------------------------------------
$sqlDeletePayedList = "DELETE FROM payedList WHERE tables_id = ? AND section_id = ?";
$stmtDeletePayedList = $conn->prepare($sqlDeletePayedList);
$stmtDeletePayedList->bind_param("ii", $tableId, $sectionId);
if ($stmtDeletePayedList->execute()) {
echo "Save değeri başarıyla güncellendi ve payedList tablosundaki ilgili satırlar silindi.";
} else {
echo "Save değeri güncellenirken bir hata oluştu: " . $stmtDeletePayedList->error;
}
$stmtDeletePayedList->close();
} else {
echo "Save değeri güncellenirken bir hata oluştu: " . $stmtUpdateSave->error;
}
$stmtUpdateSave->close();
} else {
// if you have different event you can use this section
}
} else {
echo "Sorguda bir hata oluştu: " . $stmtNew->error;
}
$stmtNew->close();
}
}
$stmtSection->close();
$stmtTable->close();
$stmtPayedDelete->close();
$stmtDelete->close();
$stmtUpdate->close();
$stmtUpdateTotal->close();
$conn->close();
} else {
echo "Gerekli veriler eksik.";
}
?> buradaki genelde payedList tablsoundaki delete sorgulari eksik calisyor fazla islem yapildiginda