چند روزی هست مشغول انجام پروژه ای هستم که در اون سرور مجبور به تحمل تعداد درخواست های زیادی است، توی هر درخواست اطلاعات دریافتی باید پس از پردازش و بررسی اولیه درون چند جدول در پایگاه داده ذخیره بشه، ولی مشکلی که در این میان وجود داره محدودیت کانکشن های ایجاد شده به پایگاه داده و همچنین سربار متحمل شده به خاطر دریافت اطلاعات از پایگاه داده بررسی اونها و ذخیره سازی اطلاعات جدید در پایگاه داده است. راهی که من برای کاهش این سربار اضافی و کاهش زمان فعال بودن هر کانکشن پایگاه داده انتخاب کردم، پیش پردازش اطلاعات و ارسال داده ها به یک رویه ی نوشته شده در پایگاه داده است، در این حالت مدت زمان فعالیت هر کانکشن پایگاه داده کم شده و همچنین بدلیل اینکه تمامی کوئری های مربوط به جداول درون یک تراکنش انجام می شود سربار های اضافی مربوط به ایجاد تراکنش های جدید با پایگاه داده کاهش می یابد.

در زیر ساختار ایجاد یک پروسیجر (یا به فارسی رویه) در `MySql` را مشاهده می کنید، نکته ی مهمی که در مورد کد زیر باید به اون اشاره کنم، سیستم کدینک پارامتر های ورودی رویه است، در کد زیر کدینک پارامتر های رشته ای `utf8mb4` مشخص شده که این کدینک مترادف با کدینگ `utf8_unicode_ci` در جداول است. در صورتی که کدینگ جدول های شما `utf8_general_ci` است، بجای `utf8mb4` از `utf8` استفاده کنید.

``` DELIMITER // CREATE PROCEDURE `MR_TRACKER` (IN `p_sid` INT(11), IN `p_vip` VARCHAR(15) CHARSET utf8mb4, IN `p_url` VARCHAR(512) CHARSET utf8mb4, IN `p_ref` VARCHAR(512) CHARSET utf8mb4, IN `p_title` VARCHAR(512) CHARSET utf8mb4, IN `p_time` INT(11), IN `p_mrud` BIGINT(20), IN `p_screen` VARCHAR(11) CHARSET utf8mb4, IN `p_os` SMALLINT(6), IN `p_browser` SMALLINT(6), IN `p_duration` SMALLINT(6), IN `p_clk_url` VARCHAR(512) CHARSET utf8mb4, IN `p_clk_data` TEXT CHARSET utf8mb4, IN `p_clk_referrer` VARCHAR(512) CHARSET utf8mb4 ) BEGIN -- in-procedure variable DECLARE tmp INT;
SET tmp = ( SELECT id FROM ... );

IF tmp > 0 THEN
  INSERT INTO ...
END IF;

UPDATE ...
INSERT INTO ...

END//
DELIMITER ;