Author Topic: Deadlock MySQL 5.7  (Read 1407 times)

0 Members and 1 Guest are viewing this topic.

Offline foxy

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 3.537
    • Foxy Land
Re: Deadlock MySQL 5.7
« Reply #15 on: August 12, 2017, 11:13:41 PM »
halo pak benz dan pak hell   (heheheh.... nick yang menarik... sayang kalau gak digunakan  :laughing3: )

Diskusi nya menarik; saya sendiri sudah hidup cukup lama untuk merasakan LOCK di Foxpro for DOS, jadi sedikit-sedikit ngerti juga mengenai LOCK. Setelah belajar Transaction di SQL Server (pertama kali berkenalan sekitar tahun 2002/2003), saya menyerahkan control locking ke RDBMS dengan block transaction.

@pak benz:
Quote from: benz
START TRANSACTION
.
.
(Procedure penomoran faktur -> disini fungsi LOCK DAN UNLOCK
.
.
IF berhasil
    COMMIT
    END TRANSACTION
ELSE
    ROLLBACK
ENDIF

Sayang sekali pak benz bagaimana prosedur penomoran faktur nya --- mungkin rahasia perusahaan ya pak?  :icon_biggrin: Ya gak masalah sih. Prinsip saya: if it ain't broke: don't fix it. Jadi diskusi yang saya tambahkan disini sama sekali bukan bermaksud supaya pak benz merubah yang sudah ada -- mungkin sekedar berbagi dan berharap mana tau ada teknik penomoran pak benz yang saya masih belum paham sehingga harus secara explisit memberikan LOCK. Sayangnya, seperti yang sudah saya sebutkan di post awal, saya kurang "akur" dengan dolphin, jadi mungkin saja informasi yang saya berikan tidak relevan. Apalagi seperti yang pak benz bilang, code ini sebelumnya jalan di MySQL 5.6, tapi crash di MySQL 5.7 --- wah... rentan sekali ya? Padahal versi MySQL nya cuma naik di minor version saja. Tapi ya udahlah... itu keputusannya si MySQL.

Anyway, saya share di bidang yang saya sangat paham saja; kalau di SQL Server, kita bisa membuat nested transaction. Jadi di dalam transaction, bisa dibuat transaction lagi. Di SQL Server juga kita bisa set transaction isolation level. Dengan fitur ini, kita bisa mengatur blok transaksi yang kita membuat query yang hasilnya adalah seakan-akan transaction sudah terjadi (padahal belum di commit); jadi kita bisa menggunakan record set "sementara" di dalam blok transaction walaupun transaction itu belum di commit (karena itu saya beri kutip "sementara"). Pengalaman saya, dua fitur ini memberikan kendali lebih di transaction -- jadi penggunaan LOCK secara explisit bisa dihindarkan. Sekali lagi, saya gak tau apakah fitur ini tersedia di MySQL atau tidak.... :)

just my 2c

foxy
This post is provided as is. Feel free to use all the codes and information, however understand that I don't have any obligations to fix any bug(s) or follow up this subject.

Offline benqz

  • Junior Member
  • *
  • Posts: 137
Re: Deadlock MySQL 5.7
« Reply #16 on: August 13, 2017, 01:27:33 AM »
Dear pak HA saya sudah juga melakukan apa yang bpk sarankan dengan meng OFF kan lewat my.cnf dan mengatur ulang semua parameter WAIT hasilnya sungguh luar biasa... sama kacaunya tidak terjadi deadlock tetapi malah transaksinya ada yang masuk dan ada yang tidak bahkan nomor faktur pun bisa sama, saya bahkan menonaktifkan semua fungsi LOCK dan UNLOCK di program buat jaga2 hasilnya malah tambah kacau. Makanya saya memutuskan kembali ke MySQL 5.1 berhubung program ini sedang berjalan dan waktu trial error saya sudah 2 - 3 bulan hasilnya program kembali lancar tanpa deadlock. Terima kasih buat referensinya pak.

Dear pak Foxy, kurang lebih seperti ini pak perintahnya:
Code: [Select]
(Procedure penomoran)
.
.
SQLEXEC(conn_mysql,"LOCK TABLES faktur WRITE")

IF ISBLANK(faktur.id_trans)
SQLEXEC(conn_mysql,"INSERT INTO faktur(cabangkey,id_trans,counter_no) "+;
"VALUES(?tnCabang,?tcKode,1)")
  ELSE
SQLEXEC(conn_mysql,"UPDATE faktur SET counter_no = counter_no + 1 "+;
"WHERE id_trans = ?tcKode AND cabangkey = ?tnCabang")
ENDIF
SQLEXEC(conn_mysql,"UNLOCK TABLES")
SQLCOMMIT(conn_mysql)
.
.
.

Maksud prosedurnya itu intinya : kunci penulisan table...update nomor...lepas kunci...commit, itu saja sih perintah yang sederhana tapi sangat bermasalah di MySQL 5.7. Menurut pendapat saya versi MySQL ini dibuat lebih fleksibel dengan membuat parameter2 yang bisa diatur lebih detail lagi bagi yang expert. Masalahnya itu membutuhkan waktu untuk uji coba fungsi2nya.

Anyway bisa dijelaskan lebih lanjut pak Foxy tentang nested transaction di SQL Servernya, saya benar2 tertarik nih.

Salam,
Benqz

Offline rnd

  • Hero Member
  • *
  • Posts: 1.268
Re: Deadlock MySQL 5.7
« Reply #17 on: August 13, 2017, 11:35:06 PM »
Pa Benz

Saya setuju dengan pa Hell, gunakan transaction, syukur sampe hari ini saya belum ada kendala dengan  nomor double ato masalah lain

sqlsetprop
ok=sqlexec
if ok=0
   sqlcommit
else
   sqlrollback

thx

Offline mztolo

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 2.059
  • ~0("-")o~
    • http://www.mztolo.com
Re: Deadlock MySQL 5.7
« Reply #18 on: August 14, 2017, 10:46:02 AM »
Pak Ronald apa khabar ?

Offline rnd

  • Hero Member
  • *
  • Posts: 1.268
Re: Deadlock MySQL 5.7
« Reply #19 on: August 14, 2017, 08:10:01 PM »
Baik pa Mztolo,

Tetap masih seperti yang dulu  :icon_biggrin: :icon_biggrin:

Offline foxy

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 3.537
    • Foxy Land
Re: Deadlock MySQL 5.7
« Reply #20 on: August 14, 2017, 11:06:06 PM »

Dear pak Foxy, kurang lebih seperti ini pak perintahnya:
Code: [Select]
(Procedure penomoran)
.
.
SQLEXEC(conn_mysql,"LOCK TABLES faktur WRITE")

IF ISBLANK(faktur.id_trans)
SQLEXEC(conn_mysql,"INSERT INTO faktur(cabangkey,id_trans,counter_no) "+;
"VALUES(?tnCabang,?tcKode,1)")
  ELSE
SQLEXEC(conn_mysql,"UPDATE faktur SET counter_no = counter_no + 1 "+;
"WHERE id_trans = ?tcKode AND cabangkey = ?tnCabang")
ENDIF
SQLEXEC(conn_mysql,"UNLOCK TABLES")
SQLCOMMIT(conn_mysql)
.
.
.

pak benz, kalau saya perhatikan, apakah betul pak benz membuat single statement (satu baris per satu baris) ke MySQL? Kalau client menjalankan rangkaian script dengan cara memanggil SQLEXEC satu baris per satu baris, maka tidak ada yang bisa menjamin akan ada client lain yang "nyelip" di antara perintah tersebut. Saya belum lihat keseluruhan code pak benz, tapi saya yakin itulah yang menjadi masalah. Seharusnya, satu rangkaian script itu dijalankan sekaligus dalam satu SQLEXEC(), jadi engine RDBMS bisa menjalankannya sebagai satu kesatuan. MySQL memang memerlukan sedikit setting untuk bisa mengijinkan multi-statement, tapi itu sudah pernah saya bahas di http://www.fox-id.org/smf/sql-database/(tips)-membuat-multi-statement-sql-di-mysql-via-vfp-dan-odbc/ .

Anyway, sekali lagi saya tekankan bahwa kalau code sudah berjalan dengan baik di versi MySQL 5.1, ya sudah --- jangan diganggu lagi. Tapi mungkin bisa dipertimbangkan untuk merubah metode kirim satu baris per satu baris itu di versi program atau project berikutnya.


Maksud prosedurnya itu intinya : kunci penulisan table...update nomor...lepas kunci...commit, itu saja sih perintah yang sederhana tapi sangat bermasalah di MySQL 5.7. Menurut pendapat saya versi MySQL ini dibuat lebih fleksibel dengan membuat parameter2 yang bisa diatur lebih detail lagi bagi yang expert. Masalahnya itu membutuhkan waktu untuk uji coba fungsi2nya.

Anyway bisa dijelaskan lebih lanjut pak Foxy tentang nested transaction di SQL Servernya, saya benar2 tertarik nih.

Salam,
Benqz

Wah, penjelasan saya pasti kalah jauh dibandingkan teman saya mas Pinal  :icon_biggrin: monggo jalan-jalan ke https://blog.sqlauthority.com/2015/03/25/sql-server-knowing-nested-transactions-behavior-with-sql-server/
This post is provided as is. Feel free to use all the codes and information, however understand that I don't have any obligations to fix any bug(s) or follow up this subject.

Offline foxy

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 3.537
    • Foxy Land
Re: Deadlock MySQL 5.7
« Reply #21 on: August 15, 2017, 06:47:21 AM »
Baik pa Mztolo,

Tetap masih seperti yang dulu  :icon_biggrin: :icon_biggrin:

jadi ingat lagu jadul-nya Dian Piesesha; Aku masih seperti yang dulu......  :icon_biggrin: :icon_biggrin: :icon_biggrin:

foxy
This post is provided as is. Feel free to use all the codes and information, however understand that I don't have any obligations to fix any bug(s) or follow up this subject.

Offline mztolo

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 2.059
  • ~0("-")o~
    • http://www.mztolo.com
Re: Deadlock MySQL 5.7
« Reply #22 on: August 15, 2017, 10:07:08 AM »
Hehehe papa foxy bisa ajah.

Btw, pak ronald ada telegram gak ya ? Saya bbm sdh tdk main je, jadi kontak dikau sdh tdk ada.

Nuwun.
**papa foxy tadi pagi baru install telegram ya :)

Offline foxy

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 3.537
    • Foxy Land
Re: Deadlock MySQL 5.7
« Reply #23 on: August 15, 2017, 04:48:24 PM »

**papa foxy tadi pagi baru install telegram ya :)

 :icon_biggrin:

Wah... memang kalau hacker kelas nya pak mztolo sih, semua juga kelihatan...  :icon_salut: :icon_salut: :icon_salut:  :)

foxy
This post is provided as is. Feel free to use all the codes and information, however understand that I don't have any obligations to fix any bug(s) or follow up this subject.

Offline mztolo

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 2.059
  • ~0("-")o~
    • http://www.mztolo.com
Re: Deadlock MySQL 5.7
« Reply #24 on: August 16, 2017, 04:30:46 PM »
Hahaha telegramnya yg kasih notifikasi pak, kalo ada yg di kontak kita install telegram :)

Offline rnd

  • Hero Member
  • *
  • Posts: 1.268
Re: Deadlock MySQL 5.7
« Reply #25 on: August 17, 2017, 06:01:06 PM »
@Foxy

Memang benar saya product jadul  :icon_biggrin: :icon_biggrin:

@Mztolo
Sudah saya pm

Offline foxy

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 3.537
    • Foxy Land
Re: Deadlock MySQL 5.7
« Reply #26 on: August 17, 2017, 07:07:47 PM »
@Rnd

sama pak... saya juga :icon_biggrin: :icon_biggrin:

@Mztolo
Sudah saya transfer
 :icon_biggrin: :icon_biggrin: :icon_biggrin: :icon_biggrin:
This post is provided as is. Feel free to use all the codes and information, however understand that I don't have any obligations to fix any bug(s) or follow up this subject.

Offline honghong

  • Newbie
  • *
  • Posts: 32
Re: Deadlock MySQL 5.7
« Reply #27 on: August 18, 2017, 09:11:07 AM »
sepertinya versi terakhir yang compatible dengan Visual FoxPro 9 adalah MySQL 5.6 CMIIW

Offline rnd

  • Hero Member
  • *
  • Posts: 1.268
Re: Deadlock MySQL 5.7
« Reply #28 on: August 18, 2017, 01:26:02 PM »
@Foxy

saya juga mau di transfer  :icon_biggrin: :icon_biggrin: :icon_biggrin:

@Honghong

Saya pake ver 5.7.16

Offline benqz

  • Junior Member
  • *
  • Posts: 137
Re: Deadlock MySQL 5.7
« Reply #29 on: August 19, 2017, 01:00:47 AM »
Terima kasih master @foxy buat sarannya saya coba pelan2 ubah single statement menjadi multi statement, sangat membantu sekali. Thank you.